#include <iostream>
#include <cmath>
#include <map>
#include <vector>
#include <algorithm>
#include <time.h>
#include <queue>
#include <unordered_set>
#include <fstream>
#include <set>
#include <unordered_map>

using namespace std;
#define ll long long

pair <ll,ll> w[100010];


double binpow (double a, ll n) {
	double res = 1.0;
	while (n) {
		if (n & 1)
			res = res * a;
		a = a * a;
		n /=2;
	}
	return res;
}

ll bp(ll l,ll r,ll cur){
  //cout<<l<<" "<<r<<endl;
  if (l>=r){
    if (l!=1 && cur!=w[l].first){
      l--;
    }
    return l;
  }
  ll md=(l+r)/2;
  if (cur<=w[md].first){
    return bp(l,md,cur);
  }else{
    return bp(md+1,r,cur);
  }
  
}

void fc (){
	
	cout << fixed;
	cout.precision(6);
	ll n,m;
	double r;
	cin>>n>>m;
	cin>>r;
	for (int i=1; i<=n; i++){
		cin>>w[i].first>>w[i].second;
	}
	
	sort(w+1,w+n+1);
	map <ll,double> a;
	a[0]=0;
	w[0].first=0;
	w[0].second=0;
	for (int i=1; i<=n; i++){
		a[w[i].first]=w[i].second*r+a[w[i-1].first]*binpow(1.0-r,w[i].first-w[i-1].first);
	}

	for (int i=0; i<m; i++){
		ll q;
		cin>>q;
		
		long long l = 0, d = n+1, mid;
		while (d - l > 1) {
			mid = (d + l) / 2;
			if (w[mid].first <= q) l = mid;
			else d = mid;
			//cout << l << ' ' << r << endl;
		}
		ll id=w[l].first;
	//	cout<<a[id]<<" "<<1-r<<" "<<q-id<<"\n";
		printf ("%.7f ",a[id]*binpow(1-r,q-id));
		
		
	}
	
	
}


int main (){
	
	
	int T=1;
//	cin>>T;
	while (T--)  fc();
  
  
  
}
