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 inf = 1e10;
long long max(long long a, long long b) {
  if (a > b)
    return (a);
  else
    return (b);
}
long long min(long long a, long long b) {
  if (a < b)
    return (a);
  else
    return (b);
}
string convert(int a) {
  string ans = "";
  while (a != 0) {
    ans += char(a % 10 + '0');
    a /= 10;
  }
  reverse(ans.begin(), ans.end());
  return (ans);
}
bool pal(string q) {
  string p = q;
  reverse(q.begin(), q.end());
  if (p == q) {
    return (true);
  }
  return (false);
}
bool sim(long long a) {
  for (int i = 2; i * i <= a; i++) {
    if (a % i == 0) {
      return (false);
    }
  }
  return (true);
}
long long gcd(long long a, long long b) {
  long long c = b;
  while (a > 0) {
    c = a;
    a = b % a;
    b = c;
  }
  return (c);
}
array<int, 200005> c;
array<int, 200005> v;
array<int, 200005> g;
long long n, k, s, t;
bool check(long long a) {
  long long time = 0;
  for (int i = 1; i <= k; i++) {
    if (a < g[i] - g[i - 1]) {
      return (false);
    } else {
      long long d = a;
      d -= g[i] - g[i - 1];
      time += 2 * (g[i] - g[i - 1]);
      time -= min(d, g[i] - g[i - 1]);
    }
  }
  if (time <= t) {
    return (true);
  } else {
    return (false);
  }
}
signed main() {
  cin >> n >> k >> s >> t;
  for (int i = 1; i <= n; i++) {
    cin >> c[i] >> v[i];
  }
  for (int i = 1; i <= k; i++) {
    cin >> g[i];
  }
  sort(g.begin() + 1, g.begin() + k + 1);
  g[0] = 0;
  k++;
  g[k] = s;
  long long L = -1;
  long long R = t + 1;
  if (!check(R - 1)) {
    cout << -1 << endl;
    return (0);
  }
  while (R - L > 1) {
    long long m = (R + L) / 2;
    if (check(m)) {
      R = m;
    } else {
      L = m;
    }
  }
  long long ans = inf;
  for (int i = 1; i <= n; i++) {
    if (v[i] >= R && ans > c[i]) {
      ans = c[i];
    }
  }
  if (ans == inf) {
    cout << -1 << endl;
    return (0);
  }
  return (0);
}
