#include <bits/stdc++.h>

#define pudge ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<ll, ll> pll;
//typedef tuple<ll, ll, ll> tll;

const ll INF = 2e18;
const double PI = acos(-1);
const ll MOD7 = 1e9 + (1000 - 7);
const ll MOD9 = 1e9 + 9;
const ll P = 31;
const ld E = 1e-6;
//const ll N = 6250001;
const ll N = 1000006;

#define x first
#define y second

long double r;

long double fp(long double ch, int st) {
    if (st == 0) return 1;
    if (st % 2 == 0) {
        long double ost = fp(ch, st / 2);
        return ost * ost;
    } else {
        return fp(ch, st - 1) * ch;
    }
}


int main() {
    pudge;

//    freopen("minmax.in", "r", stdin);
//    freopen("minmax.out", "w", stdout);

    int n, q;
    cin >> n >> q;

    cin >> r;
    vector<pair<int, pair<int, int>>> zap; // day, type, Znachenie
    vector <int> vopros;
    for (int i = 0; i < n; i++) {
        int day, w;
        cin >> day >> w;
        zap.push_back({day, {0, w}});
    }
    for (int i = 0; i < q; i++) {
        int day;
        cin >> day;
        vopros.push_back(day);
        zap.push_back({day, {1, 100}});
    }
    sort(zap.begin(), zap.end());
    long double now = 0;
    map <int, long double> ans;
    for (int i = 0; i < zap.size(); i++) {
        int tupe = zap[i].y.x, day = zap[i].x;
        if (tupe == 1) {
            if (i == 0) {
                ans[day] = now;
                continue;
            }
            now = now * fp((1 - r), zap[i].x - zap[i - 1].x);
            ans[day] =  now;
        } else {
            int w = zap[i].y.y;
            if (i == 0) {
                now = w * r;
                continue;
            }
            now = now * fp((1 - r), zap[i].x - zap[i - 1].x);
            now += w * r;
        }
    }
    for (int i = 0; i < q; i++){
        cout << fixed << setprecision(10) << ans[vopros[i]] << " ";
    }
    return 0;
}