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);
    }
}