#include <bits/stdc++.h>
using namespace std;
#define fo(i,s,t) for(int i = s; i <= t; ++ i)
#define fd(i,s,t) for(int i = s; i >= t; -- i)
#define pb push_back
#define mp make_pair
const int maxn = 2005;
int n, p, q, a[maxn];
int dp[maxn][maxn], g[maxn], gg[maxn];
bool judge(int x)
{
fo(i,1,n) fo(j,0,p) dp[i][j] = 1<<30;
dp[0][0] = 0;
int l, r, mid, pos;
fo(i,1,n)
{
l = 1; r = i; pos = 0;
while(l <= r)
{
mid = l + r >> 1;
if(a[i]-x+1<=a[mid]) pos = mid, r = mid - 1;
else l = mid + 1;
}
g[i] = pos;
l = 1; r = i; pos = 0;
while(l <= r)
{
mid = l + r >> 1;
if(a[i]-x*2+1<=a[mid]) pos = mid, r = mid - 1;
else l = mid + 1;
}
gg[i] = pos;
}
fo(i,1,n) fo(j,0,p)
{
if(j) dp[i][j] = min(dp[i][j], dp[g[i]-1][j-1]);
dp[i][j] = min(dp[i][j], dp[gg[i]-1][j]+1);
}
fo(i,0,p) if(dp[n][i]<=q) return true;
return false;
}
void task1()
{
if(p >= n || q >= n)
{
printf("1");
return;
}
int l, r, mid, ans;
l = 1; r = 1000000000;
while(l <= r)
{
mid = l + r >> 1;
if(judge(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
printf("%d",ans);
}
int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
scanf("%d%d%d",&n,&p,&q);
fo(i,1,n) scanf("%d",&a[i]);
sort(a+1,a+n+1);
task1();
return 0;
}