#include <iostream>
#include <vector>
#define ll long long
#define endl '\n'
using namespace std;
int L,N,K;
vector<int> a;
int calu(int x){
int res = 0;
vector<int> c(a);//复制a数组,以保证对之后的x不产生影响,这也是我使用vector的主要原因。
for(int i =1;i<=N;i++){
int dis = abs(c[i]-c[i-1]);//计算出差值
if(dis>x)
c[i-1] +=x,i--,res++;//对于第i-1个路标进行更新,然后对i进行回溯,因为我们需要用上刚刚更新的路标的位置。
}
return res;
}
void solution(){
cin>>L>>N>>K;
a.push_back(0); // 先插入第0位置上的数字为0,以方便calu函数中的比较操作。
for(int i =1;i<=N;i++) {
int b;
cin >> b;
a.push_back(b);
}
int l = 0, r =L+1;//常规二分操作
while(l+1<r){
int m = (l+r)/2;
if(calu(m)<=K)
r = m;
else
l = m;
}
cout<<r;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
solution();
}