1 1 2 2
1000000000 1000000000
1
 1 1 1000000000 1000000000
100 1000000000
1
 1 1 10 18
5 6
5
 2 1 1000000000 2000000000
111 999999999
101 999999998
1
 4 13 400 600
13 30
1 19
1 160
1 113
58 73 15 319 194 362 128 157 336 162 77 90 96
 1 15 100 200
283 8
30 58 16 45 80 82 55 95 24 23 86 28 51 47 20
 3 2 300 400
24 68
13 65
15 113
127 177
 1 1 2 1
1 10
1
 4 2 7 15
10 9
4 4
9 3
4 10
1 6
 2 1 1000000000 2000000000
111 1000000000
101 1000000000
5
 2 1 1000000000 2000000000
111 999999998
101 999999998
1
 1 1 1000000000 1000000000
1 1000000000
1

1000000000
 -1
 5
 111
 1
 -1
 -1
 -1
 4
 101
 -1
 -1

#include <iostream>
#include<vector>
#include<algorithm>
#include<functional>
using namespace std;
vector<pair <int,int> > a;
int gas[200001],maxras,k,t,raz[200001];
long long vreme(int poz)
{
    long long ukvreme=0;
    int i,kap=a[poz].second;
    if(maxras>kap)
        return (long long)t+1;
    else
    {
        for(i=0;i<=k;i++)
        {
            //raz=gas[i]-gas[i-1];
            if(2*raz[i]<=kap)
                ukvreme+=(long long)raz[i];
            else
                ukvreme=ukvreme+(long long)raz[i]*2-(long long)(kap-raz[i]);
                //ukvreme=ukvreme+(long long)(kap-raz)+2*(long long)(2*raz-kap);
        }
        return ukvreme;
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int poc,kraj,sredina,p,q,n,s,i;
    cin >> n >> k >> s >> t;
    for(i=0;i<n;i++)
    {
        cin >> p >> q;
        a.push_back(make_pair(p,q));
    }
    for(i=0;i<k;i++)
        cin >> gas[i];
    sort(gas,gas+k);
    raz[0]=gas[0];
    for(i=1;i<k;i++)
    {
        raz[i]=gas[i]-gas[i-1];
        if(gas[i]-gas[i-1]>maxras)
            maxras=gas[i]-gas[i-1];
    }
    raz[k]=s-gas[k-1];
    if(raz[k]>maxras)
        maxras=raz[k];
    sort(a.begin(),a.end());
    poc=0;
    kraj=n-1;
    if(vreme(n-1)>(long long)t)
        cout << -1;
    else
    {
        while(poc<=kraj)
        {
            sredina=(poc+kraj)/2;
            if(vreme(sredina)<=(long long)t && vreme(sredina-1)>(long long)t)
                break;
            else
            {
                if(vreme(sredina)>(long long)t)
                    poc=sredina+1;
                else
                    kraj=sredina-1;
            }
        }
        cout << a[sredina].first;
    }
    //cout << vreme(0);
    return 0;
}
