#include <bits/stdc++.h>

using namespace std;
using ull = unsigned long long;
using ld = long double;
using ll = long long;
using PII = pair<int, int>;
using PLL = pair<long long, long long>;
using PSS = pair<string, string>;
using ui = unsigned int;

#define fast_io ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
#define mp make_pair
#define pb push_back
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define lb(set, x) set.lower_bound(x)
#define ub(set, x) set.upper_bound(x)

const ll INF = 1e18;
const ll MOD = 1e9 - 7;

void solve() {
    int n, m;
    cin >> n >> m;

    ld r;
    cin >> r;

    vector<pair<int, int>> a(n);
    vector<pair<ld, ld>> ans(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i].first >> a[i].second;
    }

    sort(all(a));

    vector<int> days(n), ads(n);
    for (int i = 0; i < n; ++i) {
        days[i] = a[i].first;
        ads[i] = i;
    }

    ans[0] = {0, 0 + a[0].second * r};
    for (int i = 1; i < n; ++i) {
        ans[i].first = ans[i - 1].second * pow((1 - r), a[i].first - a[i - 1].first);
        ans[i].second = ans[i].first + (ld) a[i].second * r;
    }

    cout.precision(6);
    for (int i = 0; i < m; ++i) {
        int day;
        cin >> day;

        int index = lower_bound(all(days), day) - days.begin();
        if (index != n && days[index] == day)
            cout << ans[ads[index]].second << ' ';
        else if (!index && days[index] > day)
            cout << 0 << ' ';
        else
            cout << ans[ads[index - 1]].second * pow((1 - r), (day - days[index - 1])) << ' ';
    }
}

signed main() {
    fast_io;
    solve();
    return 0;
}