N, L = map(int, input().split()) K = int(input()) A = list(map(int, input().split())) INF = 1<<60 def func(limit): R = [] r = 0 for l in range(N+1): while r < len(A) and A[r]-A[l] < limit: r += 1 R.append(r) dp = [[-INF]*3 for _ in range(N+2)] dp[0][0] = 0 for i in range(N+1): for j in range(3): if dp[i][j] == -INF: continue dp[i+1][j] = max(dp[i+1][j], dp[i][j]+1) if R[i] <= N+1 and j < 2: dp[R[i]][j+1] = max(dp[R[i]][j+1], dp[i][j]+1) return K+1 <= dp[-1][2] A = [0]+A+[L] left = 0 right = 10**9 while left+1 < right: mid = (left+right)//2 if func(mid): left = mid else: right = mid print(left)