#include <bits/stdc++.h>
using namespace std;
template <class temp>
inline void Rd(temp &p) {
  p = 0;
  char c;
  while (c = getchar(), c < 48)
    ;
  do p = p * 10 + (c & 15);
  while (c = getchar(), c > 47);
}
int n, k, len, m, q[200005];
int l[200005], r[200005];
int lfind(int x) {
  if (l[x] == x)
    return x;
  else
    return l[x] = lfind(l[x]);
}
int rfind(int x) {
  if (r[x] == x)
    return x;
  else
    return r[x] = rfind(r[x]);
}
int main() {
  Rd(n), Rd(k), Rd(len), Rd(m);
  for (int i = 1; i <= n; i++) l[i] = i - 1, r[i] = i + 1;
  l[0] = r[0] = 0;
  l[n + 1] = r[n + 1] = n + 1;
  for (int i = 1; i <= m; i++) {
    Rd(q[i]);
    l[q[i]] = r[q[i]] = q[i];
  }
  int pre = 0, ans = 0;
  for (int i = 1; i <= n + 1; i++)
    if (lfind(i) == rfind(i)) {
      ans += (i - pre) / (len + 1);
      pre = i;
    }
  if (ans >= k) puts("-1"), exit(0);
  for (int i = m; i >= 1; i--) {
    int pos = q[i];
    ans -= (rfind(r[pos - 1]) - lfind(l[pos - 1])) / (len + 1);
    ans -= (rfind(r[pos + 1]) - lfind(l[pos + 1])) / (len + 1);
    l[pos] = pos - 1, r[pos] = pos + 1;
    ans += (rfind(r[pos]) - lfind(l[pos])) / (len + 1);
    if (ans >= k) printf("%d\n", i), exit(0);
  }
}
