#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
int n, m, q, len, sum;
set<int> pos;
int main()
{
cin >> n >> m >> len >> q;
pos.insert(0);
pos.insert(n + 1);
// cantidad de barcos máximos que entran en el tablero
sum = (n + 1) / (len + 1);
for (int i = 1; i <= q; ++i)
{
int x, l, r;
cin >> x;
// Si la bala actual ya existe, continua a la siguiente iteracion
if (pos.find(x) != pos.end())
continue;
// Se obtiene la posicion de la bala mas cercana por encima de la actual
auto it = pos.upper_bound(x);
// Se obtiene la posicion de la bala mas cercana por debajo de la actual
l = *prev(it);
r = *it;
// Restamos a la cantidad de barcos maximos los barcos que entran fuera de los lugares donde cayeron las balas
sum -= (r - l) / (len + 1);
// Sumamos la cantidad de barcos que entran en el rango entre la bala minima - actual y bala actual - maxima
sum += (x - l) / (len + 1) + (r - x) / (len + 1);
// Insertamos la posicion de la bala actual, se usa set en caso se dispare a la misma posicion varias veces
pos.insert(x);
// Si sum es menor que la cantidad de barcos maximos que deberian entrar en el tablero, se hizo trampa
if (sum < m)
{
cout << i << '\n';
return 0;
}
}
// No se hizo trampa
cout << "-1\n";
return 0;
}
454A - Little Pony and Crystal Mine | 2A - Winner |
1622B - Berland Music | 1139B - Chocolates |
1371A - Magical Sticks | 1253A - Single Push |
706B - Interesting drink | 1265A - Beautiful String |
214A - System of Equations | 287A - IQ Test |
1108A - Two distinct points | 1064A - Make a triangle |
1245C - Constanze's Machine | 1005A - Tanya and Stairways |
1663F - In Every Generation | 1108B - Divisors of Two Integers |
1175A - From Hero to Zero | 1141A - Game 23 |
1401B - Ternary Sequence | 598A - Tricky Sum |
519A - A and B and Chess | 725B - Food on the Plane |
154B - Colliders | 127B - Canvas Frames |
107B - Basketball Team | 245A - System Administrator |
698A - Vacations | 1216B - Shooting |
368B - Sereja and Suffixes | 1665C - Tree Infection |