#include <bits/stdc++.h>
using namespace std;
vector<int> section;
map<int, int> maps;
int main() {
  int n, k, a, m, point;
  scanf("%d%d%d", &n, &k, &a);
  scanf("%d", &m);
  maps[0] = 0;
  maps[n + 1] = 0;
  int can = (n + 1) / (a + 1);
  map<int, int>::iterator myit;
  map<int, int>::iterator myit2;
  for (int i = 1; i <= m; i++) {
    scanf("%d", &point);
    myit = maps.lower_bound(point);
    myit2 = myit;
    myit--;
    maps[point] = 0;
    int dist = myit2->first - myit->first;
    int dist1 = (point - myit->first);
    int dist2 = (myit2->first - point);
    can -= dist / (a + 1);
    can += dist1 / (a + 1);
    can += dist2 / (a + 1);
    if (can < k) {
      printf("%d\n", i);
      return 0;
    }
  }
  printf("%d\n", -1);
  return 0;
}
