#include <bits/stdc++.h>
 
using namespace std;
 
#define int long long
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
#define pb push_back
#define F first
#define S second
#define mp make_pair
#define sz(x)(int) x.size()
#define ins insert
#define speed ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
#define rep(i, a, b) for (int i = a; i < b; i++)
#define pf push_front
#define pb push_back
#define all(x) x.begin(), x.end()
#define pii pair < int, int >
#define pll pair < ll, ll >
#define vi vector < int >
#define vll vector < long long >
#define vpii vector < pair < int, int >>
#define vpll vector < pair < long long, long long >>
#define mem memset
#define debug cerr << "OK\n";
 
mt19937 bruh(chrono::steady_clock::now().time_since_epoch().count());
mt19937_64 rofl(chrono::steady_clock::now().time_since_epoch().count());
 
const int inf = 1e9;
const ll INF = (ll)1e18;
const ll INF1 = (ll)1e14 + 1;
const int N = (int)5e5 + 5;
const int MAT = 2005;
const ll mod = (ll)1e9 + 7;
const ll mod1 = (ll)1e9 + 9;
const ll MAX = (ll)15000000 + 5;
const int P = 31;
const int K = 17;
const long double eps = 1e-9;
long double binpow(double a, ll n) {
    if (n == 0) return 1;
    if (n == 1) return (a);
    long double r = binpow(a, n / 2);
    if (n & 1) return (((r * r)) * a);
    return (r * r);
}
 
void setIO(string s) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
}
 
int dx[4] = {
    0,
    -1,
    0,
    1
};
 
int dy[4] = {
    1,
    0,
    -1,
    0
};
 
ll add(ll a, ll b) {
    return (((a + b) % mod) + mod) % mod;
}
 
ll mul(ll a, ll b) {
    return (a * b) % mod;
}
 
long double p[N + 1], ans[N];
int d[N];
void yela() {
    int n, m;
    cin >> n >> m;
    long double r;
    cin >> r;
    pii a[n + 1];
    for (int i = 1; i <= n; i++) {
        cin >> a[i].F >> a[i].S;
        d[i] = a[i].F;
    }
    sort(a + 1, a + n + 1);
    sort(d + 1, d + n + 1);
    long double k = (1 - r);
    p[0] = 1;
    int s = 0;
    for (int i = 1; i < N; i++) {
        p[i] = p[i - 1] * k;
        if (p[i] < eps) {
            s = i;
            break;
        }
    }
    ans[1] = a[1].S;
    for (int i = 2; i <= n; i++) {
        ans[i] = ans[i - 1] * p[min(N, a[i].F - a[i - 1].F)] + a[i].S;
        if (ans[i] < eps)break;
    }
 
    while (m--) {
        int q;
        cin >> q;
        int i = (int)(upper_bound(d + 1, d + n + 1, q) - d);
        i--;
        cout << fixed << setprecision(9) << r * (ans[i] * p[min(N, q - d[i])]) << ' ';
    }
}
 
signed main() {
    speed;
    int T = 1;
    //cin >> T;
    for (int i = 1; i <= T; i++) {
        yela();
    }
    #ifdef ONPC
        cerr << endl << "finished in " << clock() * 1.0 / CLOCKS_PER_SEC << " sec" << endl;
    #endif
    return 0;
}