#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
****************************************************************/