#include <bits/stdc++.h>
using namespace std;
void read_file(bool outToFile = true) {}
int a;
struct AVL {
  int s, e, n, h;
  AVL *l, *r;
  AVL(int _s, int _e) {
    s = _s, e = _e;
    int q = (e - s + 1) / (a + 1);
    int rm = (e - s + 1) - q * (a + 1);
    n = q;
    if (rm == a) n++;
    h = 1;
    l = r = NULL;
  }
};
int get_n(AVL *cur) {
  if (!cur)
    return 0;
  else
    return cur->n;
}
int get_h(AVL *cur) {
  if (!cur)
    return 0;
  else
    return cur->h;
}
int BF(AVL *cur) {
  if (!cur)
    return 0;
  else
    return get_h(cur->l) - get_h(cur->r);
}
void upd(AVL *cur) {
  if (!cur) return;
  int q = (cur->e - cur->s + 1) / (a + 1);
  int r = (cur->e - cur->s + 1) - q * (a + 1);
  if (r == a) q++;
  cur->n = q + get_n(cur->l) + get_n(cur->r);
  cur->h = 1 + max(get_h(cur->l), get_h(cur->r));
}
AVL *right_rot(AVL *Q) {
  AVL *P = Q->l;
  Q->l = P->r;
  P->r = Q;
  upd(Q);
  upd(P);
  return P;
}
AVL *left_rot(AVL *P) {
  AVL *Q = P->r;
  P->r = Q->l;
  Q->l = P;
  upd(P);
  upd(Q);
  return Q;
}
AVL *balance(AVL *cur) {
  if (BF(cur) == 2) {
    if (BF(cur->l) == -1) cur->l = left_rot(cur->l);
    cur = right_rot(cur);
  } else if (BF(cur) == -2) {
    if (BF(cur->r) == 1) cur->r = right_rot(cur->r);
    cur = left_rot(cur);
  }
  return cur;
}
AVL *insert(AVL *cur, int s, int e) {
  if (!cur)
    return new AVL(s, e);
  else if (e < cur->s)
    cur->l = insert(cur->l, s, e);
  else if (cur->e < s)
    cur->r = insert(cur->r, s, e);
  upd(cur);
  return balance(cur);
}
AVL *search(AVL *cur, int x) {
  if (!cur) return NULL;
  if (x < cur->s)
    return search(cur->l, x);
  else if (cur->e < x)
    return search(cur->r, x);
  else
    return cur;
}
AVL *find_min(AVL *cur) {
  if (!cur) return NULL;
  while (cur->l) cur = cur->l;
  return cur;
}
AVL *remove(AVL *cur, int s, int e, int x) {
  if (!cur) return NULL;
  if (e < cur->s)
    cur->l = remove(cur->l, s, e, x);
  else if (cur->e < s)
    cur->r = remove(cur->r, s, e, x);
  else {
    int S = cur->s;
    cur->s = x + 1;
    cur->l = insert(cur->l, S, x - 1);
  }
  upd(cur);
  return balance(cur);
}
int n, k, m;
int main() {
  read_file();
  while (scanf("%d %d %d\n", &n, &k, &a) != EOF) {
    AVL *root = NULL;
    root = insert(root, 1, n);
    scanf("%d\n", &m);
    int ans = -1;
    for (int i = 0; i < m; i++) {
      int x;
      scanf("%d ", &x);
      AVL *tmp = search(root, x);
      root = remove(root, tmp->s, tmp->e, x);
      int cur = get_n(root);
      if (cur < k) {
        ans = i + 1;
        for (int j = i + 1; j < m; j++) scanf("%d ", &x);
        break;
      }
    }
    cout << ans << endl;
  }
}
