#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <queue>
#include <iomanip>
#include <fstream>
#include <stack>

#define int long long
#define endl '\n'
#define fi first
#define se second
#define p_b push_back

using namespace std;

const int inf = 1e9 + 7;
const int sz=1e5+2;
int n,m;
long double r;
unordered_map<int,bool>mark;
pair<int,int>p[sz];
int q[sz],d[sz];
long double ans[sz];
long double fp(double a,int x)
{
    if(x==0)
    {
        long double q=1;
        return q;
    }
    if(x%2==1)
    {
        return fp(a,x-1)*a;
    }
    long double m=fp(a,x/2);
    return m*m;
}
main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin>>n>>m;
    cin>>r;
    for(int i=1;i<=n;i++)
    {
        cin>>p[i].fi>>p[i].se;
    }
    sort(p,p+n+1);
    for(int i=0;i<m;i++)
    {
        cin>>q[i];
    }
    for(int i=1;i<=n;i++)
    {
        d[i]=p[i].fi;
        if(p[i].fi==p[i-1].fi+1)
        {
            mark[d[i]]=1;
           // cout<<ans[d[i-1]]*(1-r)<<" "<<r*p[i].se<<endl;
            ans[d[i]]=ans[d[i-1]]*(1-r)+r*p[i].se;
        }
        else
        {
            mark[d[i]]=1;
            ans[d[i]]=ans[d[i-1]]*fp(1-r,p[i].fi-p[i-1].fi)+r*p[i].se;
        }
        //cout<<i<<" "<<ans[d[i]]<<endl;
    }
    for(int i=0;i<m;i++)
    {
        if(mark[q[i]]==1)
        {
            cout<<fixed<<setprecision(10)<<ans[q[i]]<<" ";
        }
        else
        {
            int ind=lower_bound(d,d+n+1,q[i])-d;
            //cout<<q[i]<<" "<<ind<<endl;
            if(ind==1)
            {
                cout<<0<<" ";
            }
            else
            {
                ind--;
                //cout<<"! "<<q[i]-d[ind]<<" "<<fp(1-r,q[i]-d[ind])<<endl;
                cout<<fixed<<setprecision(10)<<ans[d[ind]]*fp((1-r),q[i]-d[ind])<<" ";
            }
        }
    }
    return 0;
}


/*
3 3
0.5
2 6
3 8
4 10
1 3 5


5 6
0.3333333
1 27
6 27
3 27
4 27
5 27
1 2 3 4 5 6
*/
