#include<bits/stdc++.h>
using namespace std;
int n,m,l,a[50010];
bool check(int x){
int t=1,n=1,c=1;
while(c<n+1){
c++;
if(a[c]-a[n]<x){//小于最小,要移走
t++;//实际一走数量加
}
else n=c;//这个人直接去下一个石头
}
return t<=m;//返回实际移走数量
}
int main(){
cin>>l>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
a[n+1]=l;
long long left=0,r=l,mid,ans=0;
while(left<=r){
mid=left+(r-left)/2;
if(check(mid)){//在网上找
left=mid+1;
ans=mid;
}
else r=mid-1;
}
cout<<ans;
return 0;
}