/*kZime*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define MAXN 50233
using namespace std;
inline int read() {
int k = 0, f = 1; char c = getchar();
for(; !isdigit(c); c = getchar())if(c == '-') f = -1;
for(; isdigit(c); c = getchar()) k = k * 10 + c - '0';
return k * f;
}
/*-----------------------------------------------------------------------------*/
int n, m, c, l, r, w[MAXN];
bool check(int mid) {
int flag = 0;
int s = 0;
for(int i = 1; i <= n + 1; i++) {
if(w[i] - s < mid) flag++;
else s = w[i];
}
if(flag > m) return false;
else return true;
}
int AC() {
#ifndef MYLAB
freopen("2015stone.in", "r", stdin);
freopen("2015stone.out", "w", stdout);
#else
// freopen("in.txt", "r", stdin);
#endif
c = read();
n = read();
m = read();
for(int i = 1; i <= n; i++) {
w[i] = read();
}
l = 0;
r = w[n + 1] = c;
while(l <= r) {
int mid = (l + r ) / 2;
if(check(mid)) l = mid + 1;
else r = mid - 1;
}
printf("%d", l - 1);
return 0;
}
int HA = AC();
int main(){;}