func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class temp>   inline void Rd(temp &p) {     p = 0;     char c;     while (c = getchar(), c < 48)       ;     do p = p * 10 + (c & 15);     while (c = getchar(), c > 47);   }   int n, k, len, m, q[200005];   int l[200005], r[200005];   int lfind(int x) {     if (l[x] == x)       return x;     else       return l[x] = lfind(l[x]);   }   int rfind(int x) {     if (r[x] == x)       return x;     else       return r[x] = rfind(r[x]);   }   int main() {     Rd(n), Rd(k), Rd(len), Rd(m);     for (int i = 1; i <= n; i++) l[i] = i - 1, r[i] = i + 1;     l[0] = r[0] = 0;     l[n + 1] = r[n + 1] = n + 1;     for (int i = 1; i <= m; i++) {       Rd(q[i]);       l[q[i]] = r[q[i]] = q[i];     }     int pre = 0, ans = 0;     for (int i = 1; i <= n + 1; i++)       if (lfind(i) == rfind(i)) {         ans += (i - pre) / (len + 1);         pre = i;       }     if (ans >= k) puts( -1 ), exit(0);     for (int i = m; i >= 1; i--) {       int pos = q[i];       ans -= (rfind(r[pos - 1]) - lfind(l[pos - 1])) / (len + 1);       ans -= (rfind(r[pos + 1]) - lfind(l[pos + 1])) / (len + 1);       l[pos] = pos - 1, r[pos] = pos + 1;       ans += (rfind(r[pos]) - lfind(l[pos])) / (len + 1);       if (ans >= k) printf( %d n , i), exit(0);     }   }   