#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
const int oo = 0x3f3f3f3f3f3f3f3f;
int a[maxn];
int vis[maxn];
int flag[maxn];
int n, m, aa, nn;
bool check(int pos) {
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= pos; i++) {
    vis[a[i]] = 1;
  }
  int cnt = 0;
  int res = 0;
  for (int i = 1; i <= n; i++) {
    if (vis[i]) {
      cnt = 0;
    } else
      cnt++;
    if (cnt == aa) {
      vis[i + 1] = 1;
      res++;
      cnt = 0;
    }
  }
  if (res >= m)
    return 1;
  else
    return 0;
}
int main() {
  while (~scanf("%d %d %d", &n, &m, &aa)) {
    scanf("%d", &nn);
    for (int i = 1; i <= nn; i++) {
      scanf("%d", &a[i]);
    }
    int l = 0, r = nn + 1;
    while (l < r) {
      int m = (l + r) >> 1;
      if (check(m)) {
        l = m + 1;
      } else
        r = m;
    }
    if (l > nn)
      puts("-1");
    else {
      if (!check(l) && check(l - 1))
        printf("%d\n", l);
      else if (!check(r) && check(r - 1))
        printf("%d\n", r);
      else if (!check(l + 1) && check(l))
        printf("%d\n", l + 1);
      else if (!check(r + 1) && check(r))
        printf("%d\n", r + 1);
      else
        puts("-1");
    }
  }
}
