#include using namespace std; using pii = pair; using ll = long long; const int N = 2000010, MOD = 998244353, INF = 0x3f3f3f3f; int n, m, w[N]; int k; bool check(int mid) { vector l(n + 1, INF), r(n + 1, INF); for (int i = 1; i < n + 1; i++) { if (w[i] >= mid) { auto u = upper_bound(w, w + n + 1, w[i] - mid); --u; l[i] = w + i - u; } l[i] = min(l[i], l[i - 1]); } for (int i = n; i; i--) { if (w[n] - w[i - 1] >= mid) { auto u = lower_bound(w, w + n + 1, w[i - 1] + mid); r[i] = u - (w + i) + 1; } } for (int i = n; i > 1; i--) if (r[i] + l[i - 1] <= n - (k - 1)) return 1; return 0; } void solve() { scanf("%d%d%d", &n, &m, &k); for (int i = 1; i < n + 1; i++) scanf("%d", w + i); ++n, w[n] = m; int l = 1, r = 1e9; while (l < r) { int mid = l + r + 1 >> 1; if (check(mid)) l = mid; else r = mid - 1; } printf("%d\n", l); } int main() { int T = 1; // scanf("%d", &T); while (T--) solve(); return 0; }