#include<bits/stdc++.h>
using namespace std;
int l,n,k,o,s=100000;vector<int>a;//动态数组,跟普通数组基本一样
int main(){
cin>>l>>n>>k;
for(int i=0;i<n;i++){cin>>o;a.push_back(o);}
int lx=1,xl=l,mid;//象形变量。。。lx是左边界,xl是右边界
while(lx<=xl){
mid=(lx+xl)/2;int h=0;
for(int i=1;i<(int)a.size();i++)
if(a[i]-a[i-1]>mid)
h+=((a[i]-a[i-1])%mid==0?(a[i]-a[i-1])/mid-1:(a[i]-a[i-1])/mid);
if(h<=k){s=mid;//如果这里是s=min(s,mid),就AC不了
xl=mid-1;}
if(h>k)lx=mid+1;
}cout<<s;
return 0;
}