#include <bits/stdc++.h>
using namespace std;
struct comp : binary_function<pair<int, int>, pair<int, int>, bool> {
  bool operator()(const pair<int, int>& st1, const pair<int, int>& st2) const {
    return st1.second < st2.second ||
           st1.second == st2.second && st1.first < st2.first;
  }
};
set<pair<int, int>, comp, allocator<pair<int, int>>> setarr, b;
int main() {
  int n, k, a, m, i, sw1, sw2, count = 0;
  cin >> n >> k >> a >> m;
  int* arr = new int[m];
  for (i = 0; i < m; i++) {
    cin >> arr[i];
  }
  setarr.insert(make_pair(1, n));
  count += (n - 1 + 2) / (a + 1);
  for (i = 0; i < m; i++) {
    auto d = setarr.upper_bound({0, arr[i]});
    auto j = *d;
    count -= (j.second - j.first + 2) / (a + 1);
    sw1 = j.first;
    sw2 = j.second;
    setarr.erase(j);
    if (arr[i] - 1 >= sw1) {
      setarr.insert(make_pair(sw1, arr[i] - 1));
      count += ((arr[i] - 1) - sw1 + 2) / (a + 1);
    }
    if (sw2 >= arr[i] + 1) {
      setarr.insert(make_pair(arr[i] + 1, sw2));
      count += (sw2 - (arr[i] + 1) + 2) / (a + 1);
    }
    if (count < k) {
      cout << endl << i + 1;
      count = -2;
      break;
    }
  }
  if (count != -2) {
    cout << -1;
  }
}
