#include <bits/stdc++.h>
#ifdef LOCAL
#include "algo/debug.h"
#endif
using namespace std;
#define int long long
#define endl '\n'
#define all(v) v.begin(), v.end()
#define rall(v) v.rbegin(), v.rend()
const int sz = 2e3 + 5, inf = 1e18, mod = 998244353;
int a[sz], dp[sz][sz];
void _(){
int n, p, q;
cin >> n >> p >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a + 1, a + n + 1);
p = min(p, n);
q = min(q, n);
int l = 1, r = (int)1e9, best = r;
while (l <= r) {
int mid = (l + r) >> 1;
vector<int> nexts(n + 5, 0), nextl(n + 5, 0);
for (int i = 1; i <= n; i++) {
nexts[i] = upper_bound(a + 1, a + n + 1, a[i] + mid - 1) - a - 1;
nextl[i] = upper_bound(a + 1, a + n + 1, a[i] + 2 * mid - 1) - a - 1;
}
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= p; j++) {
dp[i][j] = inf;
}
}
dp[0][0] = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= p; j++) {
int nxts = nexts[i + 1], nxtl = nextl[i + 1];
if (j + 1 <= p) dp[nxts][j + 1] = min(dp[nxts][j + 1], dp[i][j]);
dp[nxtl][j] = min(dp[nxtl][j], dp[i][j] + 1);
}
}
bool ok = 0;
for (int j = 0; j <= p; j++) {
if (dp[n][j] <= q) {
ok = 1;
break;
}
}
if (ok) {
best = mid;
r = mid - 1;
} else l = mid + 1;
}
cout << best << endl;
}
signed main(){
cin.tie(nullptr)->sync_with_stdio(0);
int T = 1;
// cin >> T;
while (T--) _();
}
// By Riyad