#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, p, q;
cin >> n >> p >> q;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++) cin >> a[i];
sort(a.begin() + 1, a.end());
p = min(p, n);
q = min(q, n);
auto ok = [&](int w) -> bool {
vector<int> small(n + 2), big(n + 2);
int r = 1;
for (int i = 1; i <= n; i++) {
while (r <= n && a[r] - a[i] <= w - 1) r++;
small[i] = r;
}
r = 1;
for (int i = 1; i <= n; i++) {
if (r < i) r = i;
while (r <= n && a[r] - a[i] <= 2 * w - 1) r++;
big[i] = r;
}
const int INF = 1e9;
vector<vector<int>> dp(n + 1, vector<int>(p + 1, INF));
dp[0][0] = 0;
for (int i = 0; i < n; i++) {
for (int s = 0; s <= p; s++) {
if (dp[i][s] == INF) continue;
if (dp[i][s] > q) continue;
if (s + 1 <= p) {
int ni = small[i + 1] - 1;
dp[ni][s + 1] = min(dp[ni][s + 1], dp[i][s]);
}
int ni = big[i + 1] - 1;
dp[ni][s] = min(dp[ni][s], dp[i][s] + 1);
}
}
for (int s = 0; s <= p; s++) {
if (dp[n][s] <= q) return true;
}
return false;
};
int l = 1, r = 1000000000, ans = r;
while (l <= r) {
int m = l + (r - l) / 2;
if (ok(m)) {
ans = m;
r = m - 1;
} else {
l = m + 1;
}
}
cout << ans << '\n';
return 0;
}