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 <bits/stdc++.h>
#define ll long long int
#define pb push_back
#define se second
#define fi first
#define rep(i, l, r) for (ll i = (ll)(l); i < (ll)(r); i++)
#define repr(i, r, l) for (ll i = (ll)(r); i > (ll)(l); i--)
#define print(v) for (const auto itr : v){cout << itr << ' ';} cout << endl;
#define fastIO ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define mod 1e9+7
#define endl "\n"
#define inf 1e18
using namespace std;
const ll INF = 1e18L + 5;
const ll maxn = 2*1e5+5;
ll ceel(ll a, ll b){if (a % b == 0)return a / b;return a / b + 1;}
ll modneg(ll a,ll m){a = a % m;if(a<0)a=a+m;return a;}
ll powermod(ll x, unsigned ll y, ll p){ll res = 1;x = x % p;while (y > 0){if (y & 1){res = (res*x) % p;}y = y>>1; x = (x*x) % p;}return res;}
ll lcm(ll a, ll b) { return (a * b) / __gcd(a, b); };

ll n,k,s,t,arr[maxn];

bool check(ll a)
{
    ll tm=0;
    rep(i,1,k)
    {
        if(arr[i]-arr[i-1]>a)
            return false;
        if(arr[i]-arr[i-1]<=a/2)
            tm+=(arr[i]-arr[i-1]);
        else
        {
            tm+=(arr[i]-arr[i-1])*2;
            a-=arr[i]-arr[i-1];
            tm-=a;
        }
    }
    if(tm<=t)
        return true;
    else
        return false;
}

int main()
{
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
fastIO;
ll test,i,j,a,b,c,d;

cin>>n>>k>>s>>t;
vector <pair<ll,ll>> v;
rep(i,0,n)
{
    cin>>a>>b;
    v.pb({a,b});
}
arr[0]=0;
rep(i,1,k+1)
    cin>>arr[i];
arr[k+1]=s;
k+=2;
sort(arr,arr+k);
// rep(i,0,k)
//     cout<<arr[i]<<" ";
// cout<<endl;
ll lo=1,hi=1e9+5;
while (lo <= hi)
{
    ll mid = (lo + hi) / 2;
    if (!check(mid))
        lo = mid + 1;
    else
        hi = mid - 1;
}
ll ans=hi+1;
// cout<<ans<<endl;
ll mn=inf;
for(auto it:v)
{
    if(ans<=it.se)
        mn=min(mn,it.fi);
}
if(mn==inf)
    cout<<"-1\n";
else
    cout<<mn<<endl;
return 0;
}
