#include<iostream>
#include<vector>
#include<string>	
#include<map>
#include<set>
#include<queue>
#include<deque>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstdio>
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
ll gcd(ll a, ll b) {
	if (b == 0) {
		return a;
	}
	return gcd(b, a % b);
}
ll lcm(ll a, ll b) {
	return a / gcd(a, b) * b;
}

//=================================

ld bpow(ld a, ll n) {
	if (n == 0) {
		return 1;
	}
	if (n % 2 == 0) {
		ld b = bpow(a, n / 2);
		return b * b;
	}
	else {
		return bpow(a, n - 1) * a;
	}
}
struct day {
	ll i, w;
};
bool cmp(day a, day b) {
	return a.i < b.i;
}

void solve() {
	int n, m;
	cin >> n >> m;
	ld r;
	cin >> r;
	vector<day> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i].i >> a[i].w;
	}
	sort(all(a), cmp);
	vector<ld> ans(n);
	ans[0] = a[0].w;
	for (int i = 1; i < n; ++i) {
		ans[i] = ans[i - 1] * bpow(1 - r, a[i].i - a[i - 1].i);
		ans[i] += a[i].w;
	}
	while (m--) {
		int d;
		cin >> d;
		if (d < a[0].i) {
			cout << 0;
			cout << '\n';
			continue;
		}
		int l = 0, rr = n;
		while (rr - l > 1) {
			int x = (l + rr) / 2;
			if (a[x].i > d) {
				rr = x;
			}
			else {
				l = x;
			}
		}
		cout << setprecision(9) << fixed;
		cout << ans[l] * bpow((ld)r, d - a[l].i + 1) + 1e-7 << '\n';
	}
	/*int m;
	cin >> m;
	int n = (m + 1) / 2;
	vector<int> a(n);
	map<int, int> c;
	for (int i = 0; i < m; ++i) {
		int t;
		cin >> t;
		c[t]++;
	}
	int lg = log2(m + 1);
	vector<vector<int>> cn(lg + 1);
	for (auto i : c) {
		if (i.second > lg) {
			cout << -1;
			return;
		}
		cn[i.second].push_back(i.first);
	}
	for (int j = lg; j > 0; --j) {
		if (cn[j].size() != (m + 1) / (1 << j)) {
			cout << -1;
			return;
		}
		set<int> t;
		for (auto i : cn[j]) {
			if (t.find(i) != t.end()) {
				cout << -1;
				return;
			}
			t.insert(i);
			cn[j - 1].push_back(i);
		}
		for (int i = 0; i < n; i += (1 << j - 1)) {
			if (a[i] != 0) {
				if (t.find(a[i]) == t.end()) {
					cout << -1;
					return;
				}
			}
			else {
				a[i] = *t.begin();
			}
			t.erase(a[i]);
		}
	}
	for (auto i : a) cout << i << ' ';*/
}

//=================================

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int tt = 1;
	//cin >> tt;
	while (tt--) {
		solve();
		cout << '\n';
	}
	return 0;
}