import sys from itertools import combinations def main(): input = sys.stdin.read().split() idx = 0 N = int(input[idx]); idx +=1 M = int(input[idx]); idx +=1 A = [] for _ in range(N): row = list(map(int, input[idx:idx+N])) idx +=N A.append(row) # Enumerate all lines lines = [] # Rows for i in range(N): cells = [] total = 0 for j in range(N): val = A[i][j] cells.append((i, j)) total += val lines.append( (total, cells) ) # Columns for j in range(N): cells = [] total = 0 for i in range(N): val = A[i][j] cells.append((i, j)) total += val lines.append( (total, cells) ) # Diagonals # Top-left to bottom-right cells = [] total = 0 for i in range(N): j = i val = A[i][j] cells.append((i, j)) total += val lines.append( (total, cells) ) # Top-right to bottom-left cells = [] total = 0 for i in range(N): j = N - 1 - i val = A[i][j] cells.append((i, j)) total += val lines.append( (total, cells) ) min_total = float('inf') # Generate all possible combinations of lines with size from M to len(lines) for k in range(M, len(lines)+1): for selected in combinations(range(len(lines)), k): covered = set() for idx_line in selected: for (i,j) in lines[idx_line][1]: covered.add( (i,j) ) current_sum = 0 for (i,j) in covered: current_sum += A[i][j] if current_sum < min_total: min_total = current_sum print(min_total) if __name__ == "__main__": main()