#include <bits/stdc++.h>
using namespace std;
vector<int> dis;
int n,m,k;
bool Judge(int temp_ans)
{
int now = 0, p = now + 1, cnt = 0;
while(p <= m + 1)
{
if(dis[p] - dis[now] < temp_ans) //比temp_ans小,拿走该石头
cnt++; //计数拿走的石块数
else
now = p; //比temp_ans大,站在该石头上
p++;
}
return cnt <= k ? true : false;
}
int main()
{
cin >> n >> m >> k;
dis.resize(m + 2);
for(int i = 1; i <= m; i++)
scanf("%d",&dis[i]);
dis[m + 1] = n; //存入终点那块石头
int L = 1, R = n, ans = 0;
while(L <= R)
{
int temp_ans= (L + R) / 2; //mid表示挑选的一个距离,并非下标,
bool res = Judge(temp_ans);
if(res)
{
ans = temp_ans;
L = temp_ans+ 1;
}
else
{
R = temp_ans- 1;
}
}
cout << ans;
return 0;
}