package no3513; import java.util.*; public class Main { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int l = sc.nextInt(); int k = sc.nextInt(); int[] a = new int[n + 2]; for(int i = 1;i <= n;i++) { a[i] = sc.nextInt(); }a[n + 1] = l; //この大きさ以上のようかんが2個用意できるorできない int left = 0; int right = l; int INF = n + 1; while(left < right - 1) { int mid = (left + right)/2; //dp[i][j] = mid以上のようかんをすでに切り出した個数がi個で、 //j個目の切れ込みまで見終わったときの切れ込みをスルーした数の最小値 int[][] dp = new int[3][n + 2]; for(int i = 0;i <= n + 1;i++) { dp[0][i] = INF; dp[1][i] = INF; dp[2][i] = INF; }dp[0][0] = 0; for(int i = 0;i <= n;i++) { int ind = binSearch(mid + a[i],a,n); //mid以上のようかんを切り出す if(ind != n + 2) { for(int j = 0;j < 2;j++) { dp[j + 1][ind] = Math.min(dp[j + 1][ind],dp[j][i] + ind - i - 1); } } //ようかんを切り出さない(切れ込みをスルーしない for(int j = 0;j <= 2;j++) { dp[j][i + 1] = Math.min(dp[j][i + 1],dp[j][i]); } }//System.out.println(dp[2][n + 1] + " " + mid); //切れ込みをスルーできる数はn - k if(dp[2][n + 1] <= n - k) { left = mid; }else { right = mid; } }System.out.println(left); }static int binSearch(int target,int[] a,int n) { int left = 0; int right = n + 2; while(left < right - 1) { int mid = (left + right)/2; if(a[mid] < target) { left = mid; }else { right = mid; } }return right; } }