#include #include using namespace std; using namespace atcoder; #define rep(i, n) REP(i, 0, n) #define REP(i, s, e) for (int i = (s); i < (int)(e); i++) #define repr(i, n) REPR(i, n, 0) #define REPR(i, s, e) for (int i = (int)(s - 1); i >= (int)(e); i--) #define all(r) r.begin(), r.end() #define rall(r) r.rbegin(), r.rend() typedef long long ll; typedef vector vi; typedef vector vl; template T chmax(T& a, const U& b) { if (a >= b) return false; a = b; return true; } template T chmin(T& a, const U& b) { if (a <= b) return false; a = b; return true; } void yes_no(bool f, string yes = "Yes", string no = "No") { cout << (f ? yes : no) << "\n"; } void solve() { ll n, l, k; cin >> n >> l >> k; const int N = n; vl a(n); rep(i, n) cin >> a[i]; a.insert(a.begin(), 0); a.emplace_back(l); // rep(i, a.size()) cout << " " << a[i]; // cout << '\n'; auto jd = [&](ll x) -> bool { // cout << x << '\n'; int n = a.size(); const ll inf = 1e18; vl s(n, inf); rep(i, n) { if (a[n - 1] - a[i] < x) continue; ll ok = n - 1, ng = i; while (ok - ng > 1) { ll m = (ok + ng) / 2; if (a[m] - a[i] >= x) ok = m; else ng = m; } s[i] = ok - i; } // rep(i, n) cout << " " << s[i]; // cout << '\n'; vl t(n, inf); repr(i, n - 1) t[i] = min(t[i + 1], s[i]); rep(i, n) { if (i + s[i] < n && N + 1 - (s[i] + t[i + s[i]]) >= k - 1) return true; } return false; }; ll ok = 0, ng = 1e18; while (ng - ok > 1) { ll mid = (ok + ng) / 2; if (jd(mid)) ok = mid; else ng = mid; } cout << ok << '\n'; } int main() { cin.tie(0); ios::sync_with_stdio(false); int t = 1; // cin >> t; rep(ti, t) solve(); return 0; }