#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <iomanip>
typedef long long ll;
using namespace std;
#define ff first
#define ss second
/*
ll ans = 0;

ll f(ll h, ll w){
    ans += h*w;
    if(h == 1 && w == 1)
        return 1;
    if(h > w){
        if(h % 2 == 0) {
            f(h / 2, w);
            f(h / 2, w);
        }
        else {
            f(h / 2, w);
            f(h / 2 + 1, w);
        }
    }
    else{
        if(w % 2 == 0) {
            f(h, w / 2);
            f(h, w / 2);
        }
        else {
            f(h, w / 2);
            f(h, w / 2 + 1);
        }
    }
}*/
ll binpow (ll a, ll n) {
    if (n == 0)
        return 1;
    if (n % 2 == 1)
        return binpow (a, n-1) * a;
    else {
        ll b = binpow (a, n/2);
        return b * b;
    }
}
int main() {
    /*ll h,w;
    cin>>h>>w;
    ll k = f(h,w);
    cout<<ans << " " << h * w * max(h,w);
    */
    ll n, m;
    cin >> n >> m;
    double r;
    cin >> r;
    vector<pair<ll, ll>> a(n);
    vector<ll>  b(m);
    ll maxd = 0;
    for (ll i = 0; i < n; i++) {
        ll x, y;
        cin >> x >> y;
        a[i] = {x, y};
    }
    for (ll i = 0; i < m; i++) {
        cin>>b[i];
        maxd=max(maxd, b[i]);
    }

    sort(a.begin(), a.end());
    sort(b.begin(), b.end());
    ll nowi1=0, nowi2=0;
    double nowo=0;
    for (ll i=0; i<=maxd; i++){
        nowo*=1-r;
        if (i==a[nowi1].ff){
            nowo+=a[nowi1].ss*r;
            nowi1++;
        }
        if (i==b[nowi2]){
            cout<<fixed<<setprecision(6);
            cout<<nowo<<" ";
            nowi2++;
        }
    }
    return 0;

}
