#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define l(a, b, i) for (ll i = a; i < b; i++)
#define rl(a, b, i) for (ll i = a; i >= b; i--)
#define vpair vector<pair<ll, ll>>
#define inf LLONG_MAX
#define ninf LLONG_MIN
ll meow(ll N, ll W, ll P, ll Q, vector<ll> &vec) {
vector<vector<ll>> dp(N + 1, vector<ll> (P + 1, inf)); // dp[i][j] = min large cam cần dùng để film đến i-th event, và dùng j smol cam
dp[0][0] = 0;
vector<ll> idxP(N), idxQ(N); // idx của cái event đầu tiên > i mà k được film tới, nếu mình đặt cam ở event i
l(0, N, i) {
auto pos1 = upper_bound(vec.begin(), vec.end(), vec[i] + W);
idxP[i] = pos1 - vec.begin();
auto pos2 = upper_bound(vec.begin(), vec.end(), vec[i] + 2 * W);
idxQ[i] = pos2 - vec.begin();
}
l(0, N, i) {
l(0, P + 1, j) {
if (dp[i][j] <= Q) {
if (j < P) dp[idxP[i]][j + 1] = min(dp[idxP[i]][j + 1], dp[i][j]); // dùng smol cam nên j+1
dp[idxQ[i]][j] = min(dp[idxQ[i]][j], dp[i][j] + 1); // dùng cam to nên k cần j+1 ó
}
}
}
ll ans = inf;
l(0, P + 1, j) ans = min(ans, dp[N][j]);
return ans;
}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ll N, P, Q; cin >> N >> P >> Q; vector<ll> vec(N);
//set<ll> st;
l(0, N, i) cin >> vec[i];
sort(vec.begin(), vec.end());
if (N <= (P + Q)) {cout << 1; return 0;} // đặt mỗi event 1 cam riêng :D
ll lo = 1, hi = 1e10, ans = -1;
while (lo <= hi) {
ll mid = (lo + hi) / 2;
if (meow(N, mid, P, Q, vec) <= Q) {
ans = mid;
hi = mid - 1;
}
else lo = mid + 1;
}
cout << ans;
}