#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 110;
int dp[MAXN][MAXN]; //dp[i][j]:从(i,j)开始能获得的最多奶酪
int cheese[MAXN][MAXN]; //每个位置的奶酪数
int n, k; //n个洞,每次最多走k步
int dfs(int a, int b) //查找从(a,b)出发,能获得的最多奶酪数
{
if (dp[a][b])
return dp[a][b];
dp[a][b] = cheese[a][b];
for (int i = 1; i <= k; i++)
{
//横坐标正向走i步,且下一个洞奶酪比当前的多
if (a + i < n && cheese[a + i][b] > cheese[a][b])
{
dp[a][b] = max(dp[a][b], dfs(a + i, b) + cheese[a][b]);
}
//横坐标负向走i步,且下一个洞奶酪比当前的多
if (a - i >= 0 && cheese[a - i][b] > cheese[a][b])
{
dp[a][b] = max(dp[a][b], dfs(a - i, b) + cheese[a][b]);
}
//纵坐标正向走i步,且下一个洞奶酪比当前的多
if (b + i< n && cheese[a][b + i] > cheese[a][b])
{
dp[a][b] = max(dp[a][b], dfs(a, b + i) + cheese[a][b]);
}
//纵坐标负向走i步,且下一个洞奶酪比当前的多
if (b - i >= 0 && cheese[a][b - i] > cheese[a][b])
{
dp[a][b] = max(dp[a][b], dfs(a, b - i) + cheese[a][b]);
}
}
return dp[a][b];
}
int main()
{
while (cin >> n)
{
cin >> k;
if (n == -1 && k == -1)
break;
memset(dp, 0, sizeof(dp));
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> cheese[i][j];
}
}
cout << dfs(0, 0) << endl;
}
return 0;
}