#include <bits/stdc++.h>
using namespace std;
const int maxn = 200000 * 2;
int L[maxn], R[maxn];
int A[maxn], P[maxn];
bool use[maxn];
int solve(int L, int R, int A) {
  int l = 1, r = R - L - 1, ans = 0;
  if (r <= A) return r / A;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if ((R - L - mid) / A >= mid) {
      ans = mid;
      l = mid + 1;
    } else {
      r = mid - 1;
    }
  }
  return ans;
}
int main() {
  int n, k, a;
  while (scanf("%d%d%d", &n, &k, &a) == 3) {
    memset(use, false, sizeof(use));
    int m;
    scanf("%d", &m);
    for (int i = 1; i <= m; i++) {
      scanf("%d", &A[i]);
      P[i] = A[i];
    }
    A[0] = 0;
    A[m + 1] = n + 1;
    A[m + 2] = n + 2;
    sort(A, A + m + 3);
    int D = unique(A, A + m + 3) - A;
    R[0] = A[1];
    for (int i = 1; i < D; i++) {
      L[A[i]] = A[i - 1];
      R[A[i]] = A[i + 1];
    }
    int num = 0;
    for (int i = 1; i < D; i++) {
      num += solve(A[i - 1], A[i], a);
    }
    if (num >= k) {
      puts("-1");
      continue;
    }
    int f = 1;
    for (int i = m; i > 0; i--) {
      int d = P[i];
      if (use[d]) {
        continue;
      }
      use[d] = true;
      int r1 = solve(L[d], d, a);
      int r2 = solve(d, R[d], a);
      num -= (r1 + r2);
      num += solve(L[d], R[d], a);
      R[L[d]] = R[d];
      L[R[d]] = L[d];
      if (num >= k) {
        f = i;
        break;
      }
    }
    printf("%d\n", f);
  }
  return 0;
}
