#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <map>
#include <iomanip>
typedef long long ll;
using namespace std;
#define ff first
#define ss second
#define gigachad 1e9+7
/*
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);
        }
    }
}*/
double binpow (double a, double n) {
    if (n == 0)
        return 1;
    if (ll(n) % 2 == 1)
        return binpow (a, n-1) * a;
    else {
        double 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;
    long double r;
    cin >> r;
    vector<pair<ll, ll>> a;
    for (ll i = 0; i < n; i++) {
        ll x, y;
        cin >> x >> y;
        a.push_back({x, y});
    }
    for (ll i = 0; i < m; i++) {
        ll x;
        cin>>x;
        a.push_back({x, gigachad});
    }
    long double nowo=0;
    sort(a.begin(), a.end());
    ll start = 0;
    for (ll i=0; i<a.size(); i++) {
        if (a[i].ss != gigachad) {
            break;
        }
        cout<<0<<" ";
        start++;
    }
    nowo=a[start].ss*r;
    for (ll i=start+1; i<a.size(); i++){

        nowo*= pow(1-r, a[i].ff-a[i-1].ff);
        if (a[i].ss==gigachad){
            cout<<fixed<<setprecision(7)<<nowo<<" ";
        } else {
            nowo+=a[i].ss*r;
        }
    }
    return 0;

}
