#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <cmath>
#include <queue>
#include <iomanip>

using namespace std;
using ll = long long;
using ld = long double;

const int BLOCK = 1e6;

ld bin_pow(ld a, int p) {
    if (p == 0) {
        return 1;
    }
    ld b = bin_pow(a, p / 2);
    if (p % 2 == 0) {
        return b * b;
    }
    return b * b * a;
}
int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n, m;
    ld r;
    cin >> n >> m >> r;
    vector<pair<int, int>> day(n);
    for (int i = 0; i < n; i++) {
        cin >> day[i].first >> day[i].second;
    }
    vector<pair<int, int>> q(m);
    for (int i = 0; i < m; i++) {
        cin >> q[i].first;
        q[i].second = i;
    }
    sort(day.begin(), day.end());
    sort(q.begin(), q.end());
    int j = 0;
    ld x = 0;
    int d_p = 0;
    vector<ld> ans(m);
    for (auto el : day) {
        int d = el.first, w = el.second;
        while (q[j].first < d) {
            x = x * bin_pow(1 - r, q[j].first - d_p);
            ans[q[j].second] = x;
            d_p = q[j].first;

            j++;
        }
        x = x * bin_pow(1 - r, d - d_p) + w * r;
        d_p = d;
    }
    while (j < m) {
        x = x * bin_pow(1 - r, q[j].first - d_p);
        ans[q[j].second] = x;
        d_p = q[j].first;
        j++;
    }
    cout << fixed << setprecision(10);
    for (ld a : ans) {
        cout << a << ' ';
    }
    return 0;
}

