#include <bits/stdc++.h>
using namespace std;
int N, P, Q;
int A[2001];
int DP[2001][2001];
int NEXT[2][2001];
bool Check(int w)
{
for(int i = N, j0 = N + 1, j1 = N + 1; i; i--)
{
while((A[j0 - 1] - A[i]) >= w) j0--;
NEXT[0][i] = j0;
while((A[j1 - 1] - A[i]) >= (w << 1)) j1--;
NEXT[1][i] = j1;
}
// cout << w << '\n';
// cout << "0:\n";
// for(int i = 1; i <= N; i++) cout << NEXT[0][i] << " \n"[i == N];
// cout << "1:\n";
// for(int i = 1; i <= N; i++) cout << NEXT[1][i] << " \n"[i == N];
for(int i = 1; i <= N; i++) fill(DP[i], DP[i] + P + 1, -1);
DP[1][P] = Q;
for(int i = 1; i <= N; i++)
{
for(int j = 0; j <= P; j++)
{
if(DP[i][j] < 0) continue;
if(j)
{
if(NEXT[0][i] > N) return 1;
DP[NEXT[0][i]][j - 1] = max(DP[i][j], DP[NEXT[0][i]][j - 1]);
}
if(DP[i][j])
{
if(NEXT[1][i] > N) return 1;
DP[NEXT[1][i]][j] = max(DP[i][j] - 1, DP[NEXT[1][i]][j]);
}
}
}
return 0;
}
int main()
{
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cin >> N >> P >> Q;
for(int i = 1; i <= N; i++) cin >> A[i];
if((P + Q) >= N) {cout << "1\n"; return 0;}
sort(A + 1, A + N + 1);
int l = 1, r = 1000000000, s, sol = r;
while(l <= r)
{
s = (l + r) >> 1;
if(!Check(s)) l = s + 1;
else {r = s - 1; sol = s;}
}
cout << sol << '\n';
return 0;
}