#include <bits/stdc++.h>
using namespace std;
int n, a[400010], c[400010], m, b, k, now, ans, t[400010];
bool ok;
void Add(int x, int d) {
  while (x <= n) c[x] += d, x += ((x) & -(x));
}
int query(int x) {
  int res(0);
  while (x > 0) res += c[x], x -= ((x) & -(x));
  return res;
}
int work1(int val) {
  int tmp = query(val - 1), l = 1, r = val - 1;
  while (l < r) {
    int mid = (l + r) >> 1;
    if (tmp - query(mid - 1) == 0)
      r = mid;
    else
      l = mid + 1;
  }
  if (!t[l]) l--;
  return l;
}
int work2(int val) {
  int tmp = query(val), l = val + 1, r = n;
  while (l < r) {
    int mid = (l + r + 1) >> 1;
    if (query(mid) - tmp == 0)
      l = mid;
    else
      r = mid - 1;
  }
  if (!t[l]) l++;
  return l;
}
int main() {
  scanf("%d%d%d", &n, &k, &b);
  b++;
  scanf("%d", &m);
  ans = (n + 1) / b;
  for (int i = 1; i <= m; i++) {
    int x;
    scanf("%d", &x);
    int l1, r1;
    if (x != 1)
      l1 = work1(x);
    else
      l1 = 0;
    if (x != n)
      r1 = work2(x);
    else
      r1 = n + 1;
    int res = (r1 - l1) / b;
    now = (x - l1) / b + (r1 - x) / b;
    ans = ans - res + now;
    if (ans < k) {
      printf("%d\n", i);
      return 0;
    }
    Add(x, 1);
    t[x] = 1;
  }
  printf("-1\n");
  return 0;
}
