#include <bits/stdc++.h>   using namespace std;   const int N = 1510, INF = 1e9 + 9;   int n, s, m, k, last[N], a[N], dp[N][N];   bool check(int x) {     memset(dp, 0, sizeof dp);     for (int i = 0; i < n; i++) {       int val = 0;       for (int j = last[i]; j <= i; j++) val += a[j] <= x;       for (int j = 1; j <= m; j++)         dp[i + 1][j] = max(dp[i][j], dp[last[i]][j - 1] + val);     }     return k <= dp[n][m];   }   int main() {     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);     cin >> n >> s >> m >> k;     for (int i = 0; i < n; i++) cin >> a[i];     fill(last, last + n, n + 1);     while (s--) {       int l, r;       cin >> l >> r;       for (int i = --l; i < r; i++) last[i] = min(last[i], l);     }     int l = 0, r = INF;     while (r - l > 1) {       int mid = l + r >> 1;       check(mid) ? r = mid : l = mid;     }     cout << (r == INF ? -1 : r) << endl;   }   