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 <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <string>
#include <stack>
#include <deque>
#include <algorithm>
#include <iterator>
#include <numeric>
#include <functional>
#include <iomanip>

using namespace std;

typedef long long int ll;
typedef long double ld;

const int SIZE = 1000000;
const ll MOD = (int)1e9 + 7;
const int MAXM = 2000;
const int STRSIZE = 10;
const int INF = (int)1e9 + 7;
const ld PI = acosl(-1);
const int ALPHABET = 256;
const ld DELTA = 1e-6;

inline ld sqr(ld x)
{
	return x * x;
}

int main()
{
#ifdef _DEBUG
	freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
#else
	freopen("dreamrun.in", "r", stdin);
	freopen("dreamrun.out", "w", stdout);
#endif

	ios::sync_with_stdio(false);
	cin.tie(0);

	int n, k, s, t;
	cin >> n >> k >> s >> t;

	vector<int> c(n), v(n);
	for (int i = 0; i < n; i++)
		cin >> c[i] >> v[i];

	vector<int> g(k);
	for (int i = 0; i < k; i++)
		cin >> g[i];

	g.push_back(0); g.push_back(s);
	sort(g.begin(), g.end());

	ld min = INF; int min_id = -1;
	for (int i = 0; i < n; i++)
	{
		ld time = 0;
		for (int j = 1; j < g.size(); j++)
			if (g[j] - g[j - 1] > v[i])
				time = INF;
			else
				time += max(g[j] - g[j - 1], 3 * (g[j] - g[j - 1]) - v[i]);

		if (time <= t && (min_id == -1 || c[i] < c[min_id]))
		{
			min = time;
			min_id = i;
		}
	}

	if (min_id == -1)
		cout << -1 << endl;
	else
		cout << c[min_id] << endl;
}