// by Diar Esbol
#include <iostream>
#include <cmath>
#include <climits>
#include <set>
#include <map>
#include <iomanip>
#include <vector>
#include <string>
#include <algorithm>
#include <utility>
#include <queue>
#include <numeric>
#include <stack>
#include <assert.h>
 
using namespace std;
 
#define ll long long
#define ld long double
#define pb push_back
#define pop_b pop_back
#define all(x) x.begin(), x.end()
#define ull unsigned long long
 
const ll maxv = 2e5 + 123, mod = 1e9 + 7, inf = 2e9;
 
void booster( ) {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}
ll binpow(ll a, ll b) {
    if (b == 0) {
        return 1;
    }
    if (b % 2) {
        return binpow(a, b - 1) * 1LL * a % mod;
    }
    ll res = binpow(a, b / 2);
    return res * 1LL * res % mod;
}
ll lcm(ll a, ll b) {
    return abs(a * b) / gcd(a, b);
}
ll d[maxv], w[maxv];
ld dp[500000];
pair <ll, ll> pp[maxv];
void solve( ) {
    booster( );
    int n, m;
    ld r;
    cin >> n >> m >> r;
    for (int i = 1; i <= n; i++){
        cin >> pp[i].first >> pp[i].second;
    }
    sort(pp + 1, pp + n + 1);
    for (int i = 1; i <= n; i++)
        d[i] = pp[i].first;
        
    for (int i = 1; i <= n; i++){
        dp[i] = dp[i - 1] * binpow(1.0 - r, pp[i].first - pp[i - 1].first) + pp[i].second * r;
        
    }
    cout  << fixed << setprecision(7);
    for (int i = 1; i <= m; i++){
        int q;
        cin >> q;
        int pos = int(upper_bound(d, d + n + 1, q) - d) - 1;
        ld ans = dp[pos] * binpow(1.0 - r, q - d[pos]);
        
        cout << ans << " ";
    }
    
}

int main( ) {
    booster( );
    int testcases = 1;
    //cin >> testcases;
    while(testcases--) {
        solve( );
    }
    return 0;
}
