import java.util.Arrays;
import java.util.Scanner;
/**
* @author supermejane
* @date 2025/10/9 12:00
* @description BGN69 三角形取数(Hard Version)
*/
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt(), k = in.nextInt();
int size = 2 * n - 1;
int[][] a = new int[n][size];
//dp[][] Long精度
long[][] dp = new long[n][size];
a[0][n - 1] = in.nextInt();
//初始化dp[][]
Arrays.stream(dp).forEach(e -> Arrays.fill(e, Long.MIN_VALUE));
dp[0][n - 1] = a[0][n - 1];
long minVal = Long.MIN_VALUE;
for (int i = 1; i < n; i++) {
for (int j = n - 1 - i; j <= n - 1 + i; j++) {
a[i][j] = in.nextInt();
//仅仅防止越界,不用额外处理i >= n - i && i <= n - 2 + i的边界
dp[i][j] = Math.max(Math.max(j - 1 >= 0 ? dp[i - 1][j - 1] : minVal, j + 1 <= size - 1 ? dp[i - 1][j + 1] : minVal), dp[i - 1][j]) + a[i][j];
}
}
long result = minVal;
//处理k的限制
for (int i = Math.max(n - 1 - k, 0); i <= Math.min(n - 1 + k, size - 1); i++) {
result = Math.max(result, dp[n - 1][i]);
}
System.out.println(result);
}
}