#include <bits/stdc++.h>

using namespace std;
double res[100010];
double binpow(double a, int b){
	double ans = 1;
	while(b != 0){
		if(b % 2 == 0){
			a *= a;
			b /= 2;
		}
		else{
			ans *= a;
			b --;
		}
	}
	
}
int main(){
	long long n, m;
	cin >> n >> m;
	double R, x = 1;
	cin >> R;
	pair<int, int> a[n + 1];
	a[0] = {0,0};
	for(int i = 1; i <= n; i ++){
		cin >> a[i].first >> a[i].second;
	}
	sort(a + 1, a + 1 + n);
	pair<int,int> q[m + 1];
	q[0] = {0, 0};
	for(int i = 1; i <= m; i ++){
		cin >> q[i].first;
		q[i].second = i;
	}
	sort(q + 1, q + 1 + m);
	double ans[n + 1];
	ans[0] = 0;
	for(int i = 1; i <= n; i ++){
		ans[i] = ans[i - 1] * binpow((x - R), a[i].first - a[i - 1].first) + a[i].second * R;
	}
	int l = 0;
	for(int i = 1; i <= m; i ++){
		int day;
		int r = n;
		while(l <= r){
			int mid = (l + r) / 2;
			if(a[mid].first > q[i].first){
				r = mid - 1;
			}
			else{
				day = mid;
				l = mid + 1;
			}
		}
		if(a[day].first == q[i].first) res[q[i].second] = ans[day];
		else  res[q[i].second] = ans[day]*binpow((x - R), q[i].first - a[day].first);
		
		//cout << q[i].first << " " << q[i].second << " " << ans[day] << " " << binpow((x - R), q[i].first - a[day].first) << " " << q[i].first << " " << a[day].first << "\n";	
	}
	for(int i = 1; i <= m; i ++){
		cout << fixed << setprecision(7) << res[i] << " ";
	}
}
