#pragma GCC optimize("unroll-loops")
#pragma gcc optimize("Ofast")
#pragma GCC optimization("Ofast")
#pragma optimize(Ofast)
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define str string
#define fastio ios::sync_with_stdio(0), cin.tie(0);
#define fs first
#define ss second
#define endl '\n'
#define all(x) (x).begin(), (x).end()
#define len(x) x.size()

#define print(a)          \
    for (auto &x : a)     \
        cout << fixed << setprecision(10) << x << " "; \
    cout << endl;

#define printmp(a)    \
    for (auto &x : a) \
        cout << x.fs << " " << x.ss << endl;

const int mod = 1e9 + 7;

double pow(double x, int n){
    double ans = 1;
    while(n){
        if(n % 2 == 1)
            ans *= x;
        x *= x;
        n /= 2;
    }
    return ans;
}

void solve()
{
    int n, m;
    cin >> n >> m;
    double r;
    cin >> r;
    vector<pair<int, int>> a(n);
    for(int i = 0; i < n; i ++)
        cin >> a[i].fs >> a[i].ss;
    vector<pair<int, int>> b(m);
    for(int i = 0; i < m; i ++){
        cin >> b[i].fs;
        b[i].ss = i;
    }
    sort(all(a));
    sort(all(b));
    vector<double> val(n);
    val[0] = r * a[0].ss;
    for(int i = 1; i < n; i ++)
        val[i] = val[i - 1] * pow(1 - r, a[i].fs - a[i - 1].fs) + r * a[i].ss;
    vector<double> ans(m);
    for(int i = 0; i < m; i ++){
        if(a[0].fs > b[i].fs){
            ans[b[i].ss] = 0;
        }
        else{
            auto x = --upper_bound(all(a), make_pair(b[i].fs, 100000000000ll)) - a.begin();
            ans[b[i].ss] = val[x] * pow(1 - r, b[i].fs - a[x].fs);
        }
    }
    print(ans)
}

signed main()
{
    fastio int t = 1;
    // cin >> t;
    while (t--)
    {
        solve();
        cout << endl;
    }
}