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 <algorithm>

using namespace std;

int n,k,s,t;

const int Q=200007;

int pret[Q], cap[Q], ref[Q];

bool drum(int x)
{
	int timp=0;

	for(int i=1; i<=k; i++)
	{
		if(ref[i]-ref[i-1]>x)
			return 0;
		timp+=max(ref[i]-ref[i-1], (ref[i]-ref[i-1])*2-(x-(ref[i]-ref[i-1]))) ;
		//cerr<<timp<<"\n";
	}
	if(timp<=t)
		return 1;
	return 0;
}

int main()
{
	//freopen("data.in","r",stdin);
	cin>>n>>k>>s>>t;

	for(int i=1; i<=n; i++)
	{
		cin>>pret[i]>>cap[i];
	}

	for(int i=1; i<=k; i++)
		cin>>ref[i];

	k++;
	ref[k]=s;

	std::sort(ref+1,ref+k+1);

	int pas=1<<24;
	int rez=0;

	while(pas)
	{
		if(drum(pas+rez)==0)
			rez+=pas;
		pas/=2;
	}
	rez++;

	//cerr<<rez<<"\n";

	int afis=1000090000;

	for(int i=1; i<=n; i++)
	{
		if(cap[i]>=rez && afis> pret[i])
			afis=pret[i];
	}

	if(afis==1000090000)
		cout<<"-1\n";
	else
		cout<<afis<<"\n";
}