#include <bits/stdc++.h>

#define sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()

#define fi first
#define se second
#define pb push_back
#define fr(i, l, r) for (int i = (l); i <= (r); ++i)
#define rf(i, l, r) for (int i = (l); i >= (r); --i)

using namespace std;

typedef long long ll;
typedef long double ld;

ld bpow(ld a, ll b)
{
    b = min(b, ll(12500000));
    ld ans = 1;
    while(b)
    {
        if(b & 1)
            ans *= a;

        a *= a;
        b >>= 1;
    }

    return ans;
}

bool comp(pair<int, int> a, pair<int, int> b)
{
    return a.fi > b.fi;
}

void solve() {
    int n, m;
    ld r;

    cout << fixed << setprecision(6);
    cin >> n >> m >> r;

    vector<pair<int, int>> ls;
    vector<pair<int, int>> q;
    fr (i, 0, n - 1) {
        int x, y;
        cin >> x >> y;
        ls.push_back({x, y});
    }

    fr (i, 0, m - 1) {
        int x;
        cin >> x;
        q.push_back({x, i});
    }
    vector<ld> ans(m);

    ls.push_back({0, 0});
    sort(all(ls));
    sort(all(q), comp);

    ld x = 0;
    fr (i, 0, n)
    {
        if(q.empty())
            break;

        x += ls[i].se * r;

        if(q.back().fi == ls[i].fi)
        {
            ans[q.back().se] = x;
            q.pop_back();
        }

        if(i != n && q.back().fi < ls[i + 1].fi)
        {

            ans[q.back().se] = bpow((ld)(1 - r), q.back().fi - ls[i].fi) * x;
            q.pop_back();
        }

        if(i < n) {

            x *= bpow((ld)(1 - r), ls[i + 1].fi - ls[i].fi);
        }

    }
    fr (i, 0, sz(q) - 1)
    {

        x *= bpow((ld)(1 - r), q.back().fi - ls[n].fi);
        ans[q.back().se] = x;
        q.pop_back();
    }

    fr (i, 0, m - 1)
        cout << ans[i] << " ";
    cout << endl;
}
int main() {
//    freopen("input.txt", "r", stdin);
//    freopen("output.txt", "w", stdout);

    ios_base::sync_with_stdio(0);
    cin.tie(0);

    solve();

    return 0;
}
