#include<bits/stdc++.h>
using namespace std;
int i,L,N,M,a[50010];
int check(int mid){//检验函数,求出给定距离dist后 需要移走多少石头,是否不超过M
int i,last=0,cnt=0;
for(i=1;i<=N;i++){
if(a[i]-last<mid)cnt++;
else last=a[i];
}
if(L-last<mid)cnt++;
return cnt<=M;
}
int main(){
scanf("%d %d %d",&L,&N,&M);
for(i=1;i<=N;i++)scanf("%d",a+i);
sort(a+1,a+1+N);
int lo=1,hi=L,mid;
while(lo<=hi){//二分查找模板
mid=(lo+hi)/2;
if(check(mid))lo=mid+1;
else hi=mid-1;
}
printf("%d\n",lo-1);
}
/**************************************************************
Problem: 1909
User: admin
Language: C++
Result: Accepted
Time:84 ms
Memory:2272 kb
****************************************************************/