//                   LETS GOOOOOOOOO
#include <bits/stdc++.h>
using namespace std;

#define sz size
#define all(n) n.begin(),n.end()
#define ull unsigned long long
#define ll long long
#define ld long double
#define pb push_back
#define pf push_front
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define len length
#define yes cout<<"YES\n"
#define up upper_bound
#define lb lower_bound
#define no cout<<"NO\n"
#define delb pop_back
#define F first
#define S second
#define sled "\n"
#define vi vector<int>
#define vll vector<long long>
#define gcd __gcd
#define emp empty
#define startt ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0)
#define delenie cout<<"\n=========\n"
#define in insert
#define mp make_pair

const long long MOD1=998244353;
const long long MOD2=1e9+7;
const long double Eps = 1e-12;
const int max1 = 1e9*1.4; 
const int min1 = -1e9 *1.4; 
const int mod = 1e9 + 7;
const int N = 2e5 + 100;
const int B = 1e6*2 + 100;
const ll INF = 1e18 + 100;
const int G=1e2+2;

ld pre[100010];
ld binpow(ld n, int p) {
	if (p == 0) {
		return 1;
	}
	if (p % 2 == 0) {
		ld x = binpow(n, p/2);
		return x * x;
	} else {
		return n * binpow(n, p-1);
	}
}
int main () {
    startt;
    int n, m;
    cin>>n>>m;
    double r;
    cin>>r;
    pair<int, double> a[n+1];
    for(int i=1 ; i<=n; i++ ){
    	cin>>a[i].F>>a[i].S;
	}
	a[0].F = 0;
	a[0].S = 0;
	sort(a, a+n+1);
	pre[0] = 0;
	pre[1] = a[1].S*r;
	for(int i=2;i<=n;i++){
		pre[i] = pre[i-1] * pow((1-r), a[i].F - a[i-1].F) + a[i].S*r;
	}
	for (int i = 0; i < m; i++) {
		int x;
		cin >> x;
		int l = 0, q = n+1;
		while (q - l > 1) {
			int m = (l + q) / 2;
			if (a[m].F <= x) {
				l = m;
			} else {
				q = m;
			}
		}
		if (x == a[l].F) {
			cout << fixed << setprecision(7) << pre[l] << " ";
		} else {
			cout << fixed << setprecision(7) << pre[l]*pow((1-r), x-a[l].F) << " ";
		}
	}
}






