#include int a[200005]; int left[200005], right[200005]; int main() { int n, l, k; scanf("%d %d %d", &n, &l, &k); int i, j; for (i = 0; i < n; i++) scanf("%d", &a[i + 1]); a[0] = 0; a[++n] = l; int min, mid, max; min = 0; max = l + 1; while (max - min > 1) { mid = (max + min) / 2; left[0] = 1e9; for (j = 0, i = 1; i <= n; i++) { for (; a[i] - a[j + 1] >= mid; j++); if (a[i] - a[j] < mid) left[i] = 1e9; else if (left[i - 1] > i - j - 1) left[i] = i - j - 1; else left[i] = left[i - 1]; } right[n] = 1e9; for (i = n - 1, j = n; i >= 0; i--) { for (; a[j - 1] - a[i] >= mid; j--); if (a[j] - a[i] < mid) right[i] = 1e9; else if (right[i + 1] > j - i - 1) right[i] = j - i - 1; else right[i] = right[i + 1]; } j = 1e9; for (i = 0; i <= n; i++) if (j > left[i] + right[i]) j = left[i] + right[i]; if (j + k > n - 1) max = mid; else min = mid; } printf("%d\n", min); return 0; }