#include <stdio.h>
int L, n, k;
long long d[100010];
int fun(int x) {
int num = 0, i = 0,now=0;
while (i <= n) {
i++;
if (d[i] - d[now] > x) {
num+=open(d[i] - d[now], x);
now = i;
}
else now = i;
}
return num;
}
int open(int x,int y) {
if (x <= y)return 0;
else {
if (x % 2 == 0)
return open(x / 2, y) * 2 + 1;
else return open(x / 2, y) + open(x / 2 + 1, y)+1;
}
}
int main() {
scanf("%d %d %d", &L, &n, &k);
int max = 0;
for (int i = 1; i <= n; i++) {
scanf("%d", &d[i]);
if (max < d[i])max = d[i];
}
d[n+1] = L;
int r = max, l = 1,t;
while (l <= r) {
t = (r + l) / 2;
if (fun(t) >k)l = t + 1;
else r = t -1;
}
printf("%d", l);
return 0;
}