#include <iostream>
#include<vector>
#include<algorithm>
#include<iomanip>
#include<fstream>
#include<string>
#include<random>
#include<cmath>
#include<ctime>
#include<set>
#include<unordered_map>
#include<map>
#define pll pair<ll,ll>
#define all(v) v.begin(),v.end()
typedef long long ll;
using namespace std;
double binpow(double a, ll n) {
	if (n == 0)return 1.0;
	double res = binpow(a, n / 2);
	res *= res;
	if (n % 2 != 0)res *= a;
	return res;
}
int main()
{
	ios::sync_with_stdio(0);
	ll n, m;
	cin >> n >> m;
	double r;
	cin >> r;
	double di, wi;
	vector<pll>res(n+1);
	vector<ll>L(n + 1);
	res[0] = { 0,0 };
	vector<double>oth(n+1);
	for (ll i = 1; i <= n; ++i)
	{
		cin >> res[i].first >> res[i].second;
	}
	sort(res.begin(), res.end());
	for (ll i = 0; i < n + 1; ++i)L[i] = res[i].first;
	cout.setf(ios::fixed);
	oth[0] = 0;
	double buf = 1.0 - r;
	ll nom;
	for (ll i = 1; i <= n; ++i)
	{
		oth[i] = oth[i - 1] * binpow(buf, res[i].first - res[i - 1].first) + r * res[i].second;
	}
	for (ll i = 0; i < m; ++i)
	{
		cin >> nom;
		if (nom > res[n].first)
		{
			cout.precision(10);
			cout << oth[n] * binpow(buf, nom - res[n].first) << '\n';
		}
		else
		{
			ll gh = lower_bound(L.begin(), L.end(), nom) - L.begin();
			if (L[gh] > nom)--gh;
			cout.precision(10);
			cout << oth[gh] * binpow(buf, nom - res[gh].first) << '\n';
		}
	}
	return 0;
}