n, l = list(map(int, input().split())) k = n-int(input()) A = [0] + list(map(int, input().split())) + [l] from bisect import bisect_right as bs1 from bisect import bisect_left as bs0 r = l+1 l = 0 inf = 1 << 30 def main(x): #print(x, "X") dp = [inf] * (n+1) for i in range(1, n+1): dp[i] = dp[i-1] if A[i] < x: continue j = bs1(A, A[i]-x) dp[i] = min(dp[i], i-j) now = inf for i in range(n, -1, -1): if A[-1] - A[i] < x: continue j = bs0(A, A[i]+x) now = min(now, j-i-1) if now + dp[i] <= k: return 1 return 0 while r - l > 1: m = (l + r) >> 1 if main(m): l = m else: r = m print(l)