//g++ -o sol sol.cpp
//cd C:\Users\Asus-1\OneDrive\Desktop
#include <bits/stdc++.h>
using namespace std;
#define ld long double
#define int long long
const int INF=31;
#define S(a) a.begin(),a.end()
#define pb push_back
#define READ(l,r,a) for(int i=l;i<=r;i++) cin>>a[i]
#define printV(l,r,a) for(int i=l;i<=r;i++) cout<<a[i]<<' ';
#define pii pair <int,int>
#define FOR(i,l,r) for(int i=l;i<=r;i++)
int n,p,q;
vector<int>a;
void solve(){
cin>>n>>p>>q;
a.resize(n+1);
for(int i=1;i<=n;i++) cin>>a[i];
sort(S(a));
int l=1,r=1000000001,w=INF;
while(l<=r){
int mid=(l+r)>>1;
int mn=mid-1;
int mx=mid*2-1;
vector<bool>used(n+1,false);
vector<pii>rngs;
for(int i=1;i<=n;i++){
if(used[i]) continue;
int ll=i,rr=ll;
for(int j=i;j<=n;j++){
if(a[j]-a[i]<=mx) rr=j;
else break;
}
for(int j=ll;j<=rr;j++) used[j]=1;
rngs.pb({ll,rr});
}
vector<pair<int,pair<int,int>>>srt;
for(int i=0;i<rngs.size();i++) srt.pb({a[rngs[i].second]-a[rngs[i].first],{rngs[i].first,rngs[i].second}});
sort(S(srt));
//for(pair<int,pair<int,int>>pp:srt) cout<<pp.second.first<<' '<<pp.second.second<<endl;
int Q=q;
while(Q--){
if(!srt.size()) break;
srt.pop_back();
}
int need=0;
for(pair<int,pair<int,int>>pp:srt){
//cout<<pp.second.first<<' '<<pp.second.second<<endl;
int sz=a[pp.second.second]-a[pp.second.first]+1;
//cout<<sz<<endl;
need+=((sz/mid)+min(1ll,sz%mid));
}
if(p>=need){
w=min(w,mid);
r=mid-1;
}
else l=mid+1;
}
cout<<w<<endl;
}
signed main(){
ios_base::sync_with_stdio();
cin.tie(0);
cout.tie(0);
int T=1;//cin>>T;
while(T--) solve();
}