#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <stack>

using namespace std;

#define int long long
#define double long double


double power(double c, int p) {
    double x = 1.0;
    while(p) {
        if(!(p % 2)) {
            p /= 2;
            c *= c;
        }
        else {
            p--;
            x *= c;
        }
    }
    return x;
}

int n, m, maxd = -1, d, prd = 1, f;
double r, w, ans[100100], b[100100], h[100100], prw = 0.0;
pair <int, double> a[100100];

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin >> n >> m >> r;
    for(int i = 0; i < n; i++) {
        cin >> d >> w;
        a[i].first = d;
        a[i].second = w;
    }


    sort(a, a + n);
    for(int i = 0; i < n; i++) {
        b[i] = a[i].first;
        h[i] = prw * power(1 - r, a[i].first - prd) + a[i].second * r;
        prw = h[i];
        prd = b[i];
    //    cout << h[i] << endl;
    }


    for(int i = 0; i < m; i++) {
        cin >> d;
        if(d < b[0]) {
            ans[i] = 0;
            continue;
        }
        if(binary_search(b, b + n, d)) {
            ans[i] = h[lower_bound(b, b + n, d) - b];
        }
        else {
            f = lower_bound(b, b + n, d) - b;
            if(f != 0)
                f--;
            ans[i] = h[f] * power(1 - r, d - b[f]);
        }
    }

    for(int i = 0; i < m; i++)
        cout << setprecision(6) << fixed << ans[i] << " ";

    return 0;
}
