#include <bits/stdc++.h>
using namespace std;
const double PI = acos(-1.0);
const long long mod = 1e9 + 7;
const long long INF = 0x3f3f3f3f;
const int maxn = 1510;
int a[maxn], n, m, s, k, sum[maxn], dp[maxn][maxn], r[maxn];
int check(long long mid) {
  for (int i = 1; i <= n; i++) sum[i] = (a[i] <= mid) + sum[i - 1];
  memset(dp, 0, sizeof(dp));
  int mx = 0;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= s; j++) {
      dp[i + 1][j] = max(dp[i][j], dp[i + 1][j]);
      if (r[i + 1] > i) {
        int R = r[i + 1];
        dp[R][j + 1] = max(dp[R][j + 1], dp[i][j] + sum[R] - sum[i]);
      }
      mx = max(mx, dp[i][j]);
    }
  return mx;
}
int main() {
  scanf("%d", &n);
  scanf("%d", &m);
  scanf("%d", &s);
  scanf("%d", &k);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 0; i < m; i++) {
    int L, R;
    scanf("%d", &L);
    scanf("%d", &R);
    r[L] = max(r[L], R);
  }
  for (int i = 1; i <= n; i++) r[i] = max(r[i], r[i - 1]);
  long long L = 0, R = INF;
  while (L + 1 < R) {
    long long mid = (L + R) >> 1;
    if (check(mid) >= k)
      R = mid;
    else
      L = mid;
  }
  if (R == INF)
    printf("-1\n");
  else
    cout << R << endl;
  return 0;
}
