#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define pb push_back
#define pp pop_back
#define fi first
#define se second
using namespace std;
double binpow (double a , ll n) {
    if(!n)
        return 1 ;
    if(n % 2 == 1)
        return binpow(a , n - 1) * a ;
    else {
        double b = binpow(a , n / 2) ;
        return b * b;
    }
}

void solve() {
    ll n , m ;
    cin >> n >> m ;
    double r ;
    cin >> r ;
    ll d[n + 1] , w[n + 1] ;
    pair < ll , ll > p[n + 1] ;
    map < ll , ll > mp1 ;
    for(ll i = 1 ; i <= n ; i++) {
        cin >> d[i] >> w[i] ;
        mp1[d[i]] = 10 ;
        p[i] = {d[i] , w[i]} ;
    }
    ll q[m + 1] ;
    for(ll i = 1 ; i <= m ; i++) {
        cin >> q[i] ;
    }
    double c = 0 ;
    ll pred = 1 ;
    bool t = false ;
    sort(p + 1 , p + n + 1) ;
    map < ll , double > mp ;
    for(ll i = 1 ; i <= n ; i++) {
        ll num = p[i].fi - pred ;
        // cout << binpow(1 - r , num) << ' ' ;
        c *= binpow(1 - r , num) ;
        c += (p[i].se * r) ;
        pred = p[i].fi ;
        mp[p[i].fi] = c ;
    }
    vector < ll > v ;
    for(ll i = 1 ; i <= n ; i++) {
        v.pb(p[i].fi) ;
    }
    for(ll i = 1 ; i <= m ; i++) {
        if(mp1[q[i]] == 10) {
            cout << fixed << setprecision(7) << mp[q[i]] << ' ' ;
        }
        else {
            auto it = upper_bound(v.begin() , v.end() , q[i]) ;
            it-- ;
            ll num = (*it) ;
            num = q[i] - num ;
            cout << fixed << setprecision(7) << binpow(1 - r , num) * mp[(*it)] << ' ' ;
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    ll t = 1;
//  cin >> t ;
    while(t--) {
        solve() ;
    }
}
