#include using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, L, k; cin >> n >> L >> k; vector a(n + 2); for(int i = 1; i <= n; i++) cin >> a[i]; a[n + 1] = L; n += 2; // n + 1 -> k + 1 // n - k 回の合体で大きいものを2つ作る問題 int ok = 0, ng = L + 1; while(ok + 1 < ng){ int mid = (ok + ng) / 2; vector> dp(n, {-(1 << 30), -(1 << 30)}); for(int l = 0, r = 0; l < n; l++){ if(l + 1 < n){ dp[l + 1][0] = max(dp[l + 1][0], dp[l][0] + 1); dp[l + 1][1] = max(dp[l + 1][1], dp[l][1] + 1); } while(r < n && a[r] - a[l] < mid) r++; if(r < n){ dp[r][0] = max(dp[r][0], l + 1); dp[r][1] = max(dp[r][1], dp[l][0] + 1); } } (dp[n - 1][1] >= k + 1 ? ok : ng) = mid; } cout << ok << '\n'; }