#include <bits/stdc++.h>
using namespace std;
template <class T>
int getbit(T s, int i) {
  return (s >> i) & 1;
}
const long double PI = 2 * acos(0.0);
const long double eps = 1e-15;
const int infi = 1e9;
const long long Linfi = (long long)1e18;
const long long MOD = 1000000007;
const int c1 = 31;
const int c2 = 37;
const int maxn = 200005;
int n, k, a;
int m;
int x[maxn], xet[maxn];
set<pair<long long, long long> > S;
set<pair<long long, long long> >::iterator it;
void solve() {
  S.insert(pair<long long, long long>(1, n));
  S.insert(pair<long long, long long>(infi, infi));
  int cnt = (n + 1) / (a + 1);
  for (int i = 1; i <= m; i++) {
    int pos = x[i];
    if (xet[pos]) continue;
    it = S.lower_bound(pair<long long, long long>(pos, 0));
    if (it->first > pos) it--;
    int u = it->first, v = it->second;
    S.erase(it);
    if (pos > u) {
      S.insert(pair<long long, long long>(u, pos - 1));
      cnt += (pos - u + 1) / (a + 1);
    }
    if (pos < v) {
      S.insert(pair<long long, long long>(pos + 1, v));
      cnt += (v - pos + 1) / (a + 1);
    }
    cnt -= (v - u + 2) / (a + 1);
    if (cnt < k) {
      cout << i << endl;
      return;
    }
    xet[pos] = 1;
  }
  cout << -1 << endl;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n >> k >> a;
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> x[i];
  }
  solve();
  return 0;
}
