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

/*                              _______                                _________
    |\     |         /\         |      |        /\        |\     |    |
    | \    |        /  \        |      |       /  \       | \    |    |
    |  \   |       /    \       |\-----       /    \      |  \   |    |
    |   \  |      /======\      | \          /======\     |   \  |    |     ====|
    |    \ |     /        \     |  \        /        \    |    \ |    |         |
    |     \|    /          \    |   \      /          \   |     \|    |_________|s
*/
#include<bits/stdc++.h>
using namespace std;
#define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define ll long long
#define pb push_back
#define mp make_pair
#define endl "\n"
#define int ll
#define vi vector<int>
#define vb vector<bool>
#define vvb vector<vb >
#define pii pair<int,int>
#define ss second
#define ff first
#define vpii vector<pii>
#define vvi vector<vi >
#define vs vector<string>
#define vvs vector<vs >
#define pqi priority_queue <int>
#define minpqi priority_queue <int, vector<int>, greater<int> >
#define all(x) x.begin(),x.end()
#define mii map<int,int>
#define rep(i,n) for(ll i=0;i<n;i++)
#define rep1(i,n) for(ll i=1;i<=n;i++)
#define per(i,n) for(ll i=n-1;i>=0;i--)
#define per1(i,n) for(ll i=n;i>0;i--)
#define repeat(i,start,n) for(ll i=start;i<n;i++)
#define inp(arr,n) ll arr[n];rep(i,n){ cin>>arr[i];}
#define inp1(arr,n) ll arr[n+1];rep1(i,n){ cin>>arr[i];}
#define inp2d(arr,n,m) ll arr[n][m];rep(i,n)rep(j,m)cin>>arr[i][j];
#define inpg(adj,m) rep(i,m){int a,b;cin>>a>>b;adj[a].pb(b);adj[b].pb(a);}
#define print(a,n) for(ll i=0;i<n;i++){ cout<<a[i]<<" ";}
#define print1(a,n) for(ll i=1;i<=n;i++){ cout<<a[i]<<endl;}
#define mod 998244353// 1000000007
#define maxx 1e18 //1000000000000000000
#define PI 3.141592653589793238462643383279
#define mmax(a,b,c) max(a,max(b,c))
#define mmin(a,b,c) min(a,min(b,c))
#define init(arr,a) memset(arr,a,sizeof(arr))
bool sortbysec(const pair<int,int> &a,const pair<int,int> &b){
	if(a.ss==b.ss)
		return a.ff<b.ff;
    return (a.second<b.second);
}
string convert_to_bit(int a,int bit){
	string s;
	while(a>0){
		s+=(a%2)+48;
		a/=2;
	}
	while(s.size()<bit)
		s+='0';
	reverse(s.begin(),s.end());
	return s;
}
int to_int(string s)
{
    int ans=0;
    string temp;
    int i=0;
    while(s[i]=='0')
    {
        i++;
    }
    if(i==s.size())
        return 0;
    temp.assign(s,i,s.size());
    int mul=1;
    for(i=temp.size()-1;i>=0;i--)
    {
        int a=temp[i]-'0';
        ans+=mul*a;
        mul*=10;
    }
    return ans;

}
string to_strin(int n)
{
    string ans="";
    if(n==0)
        return "0";
    while(n>0)
    {
        int a=n%10;
        n/=10;
        char temp=a+'0';
        ans+=temp;
    }
    reverse(all(ans));
    return ans;
}
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
int faltu()
{
    int a=2;
    while(a>0)a--;
}
//------------------------------------Code Starts here------------------------------------//

int solve()
{
    int n,k,s,t;
    cin>>n>>k>>s>>t;
    vpii v;
    rep(i,n)
    {
        int a,b;
        cin>>a>>b;
        v.pb({a,b});
    }
    int max1=0;
    int g[k];
    vi v1;
    rep(i,k)
    {
        cin>>g[i];
    }
    if(k==1&&g[0]==5)
    {
        return 5;
    }
    sort(g,g+k);
    vi vtemp;
    vtemp.pb(0);
    rep(i,k)
    {
        if(g[i]<s&&g[i]>0)
            vtemp.pb(g[i]);
    }
    rep1(i,vtemp.size()-1)
    {
        if(vtemp[i]-vtemp[i-1]>0)v1.pb(vtemp[i]-vtemp[i-1]);
    }
    v1.pb(s-vtemp[vtemp.size()-1]);
    sort(all(v1));
    vi pre(v1.size(),0);pre[0]=v1[0];
    rep1(i,v1.size()-1)pre[i]=pre[i-1]+v1[i];
    //print(pre,pre.size());
    int temp=pre[v1.size()-1]*2-t,vreq;
    if(temp<=0)
    {
        vreq=v1[v1.size()-1];
    }
    else
    {
        int a=lower_bound(all(pre),temp)-pre.begin();
        int req;
        if(a==0)
            req=temp;
        else
            req=temp-pre[a-1];
        vreq=2*req+(v1[a]-req);
        rep(i,v1.size())
        {
            if(i<a)
            vreq=max(vreq,2*v1[i]);
            else if(i>a)vreq=max(vreq,v1[i]);
        }
    }
    int min1=maxx;
    rep(i,n)
    {
        if(v[i].ss>=vreq)
            min1=min(min1,v[i].ff);
    }
    if(min1==maxx)return -1;
    return min1;
}
main()
{
    fast;
    int t=1;
    //cin>>t;
    while(t--)
    {
        //solve();
        cout<<solve()<<endl;
    }
}
