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>
using namespace std;
long long c[200005], d[200005], v[200005];
vector<long long> dist;
long long can(long long v, long long t) {
  long long start = 0, end = dist.size() - 1, mid, time;
  while (start <= end) {
    mid = start + (end - start) / 2;
    if (v >= 2 * dist[mid])
      end = mid - 1;
    else
      start = mid + 1;
  }
  if (start < dist.size()) time = d[start];
  if (start > 0) time += 3 * (d[0] - d[start]) - start * v;
  if (time > t) return -1;
  return 1;
}
int main() {
  long long c1, v1, x = -1, f = 0, mid, n, k, s, t, i, init, maxi, start, end,
                    mini, g;
  set<pair<long long, long long> > s2;
  set<pair<long long, long long> >::iterator it1;
  pair<long long, long long> P;
  set<long long> s1;
  set<long long>::iterator it;
  scanf("%lli%lli%lli%lli", &n, &k, &s, &t);
  for (i = 1; i <= n; i++) {
    scanf("%lli%lli", &c1, &v1);
    s2.insert(make_pair(v1, c1));
  }
  for (i = 1, it1 = s2.begin(); it1 != s2.end(); i++, it1++) {
    P = *it1;
    v[i] = P.first;
    c[i] = P.second;
  }
  init = 0;
  for (i = 1; i <= k; i++) {
    scanf("%lli", &g);
    s1.insert(g);
  }
  for (it = s1.begin(); it != s1.end(); it++) {
    g = *it;
    dist.push_back(g - init);
    init = g;
  }
  dist.push_back(s - init);
  sort(dist.rbegin(), dist.rend());
  maxi = dist[0];
  long long len = dist.size() - 1;
  d[len] = dist[len];
  for (i = len - 1; i >= 0; i--) d[i] = dist[i] + d[i + 1];
  start = -1;
  for (i = 1; i <= n; i++) {
    if (v[i] >= maxi) {
      start = i;
      break;
    }
  }
  end = s2.size();
  long long idx = -1;
  while (start <= end && start != -1) {
    mid = start + (end - start) / 2;
    long long time;
    time = can(v[mid], t);
    if (time == -1)
      start = mid + 1;
    else {
      idx = mid;
      end = mid - 1;
    }
  }
  if (start > -1 && idx > -1) {
    mini = c[idx];
    for (i = idx + 1; i <= s2.size(); i++)
      if (c[i] < mini) mini = c[i];
    printf("%lli\n", mini);
  } else
    printf("-1\n");
  return 0;
}
