#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
const int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
int n, m;
int w[N][N], f[N][N];
int dfs(int x, int y){
if (f[x][y] != -1) return f[x][y];
int mx = 0;
for (int i = 1; i <= m; i ++ )
for (int j = 0; j < 4; j ++ ){
int nx = x + dx[j] * i, ny = y + dy[j] * i;
if (w[nx][ny] > w[x][y] && nx >= 1 && nx <= n && ny >= 1 && ny <= n)
mx = max(mx, dfs(nx, ny));
}
return f[x][y] = mx + w[x][y];
}
int main()
{
while (~scanf("%d%d", &n, &m)){
if (n == -1 && m == -1) break;
for (int i = 1; i <= n; i ++ )
for (int j = 1; j <= n; j ++ )
cin >> w[i][j];
memset(f, -1, sizeof f);
printf("%d\n", dfs(1, 1));
}
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 2010;
typedef long long LL;
int n, m;
LL f[N][1100];
LL w[N];
int main()
{
while (~scanf("%d%d", &n, &m)){
for (int i = 1; i <= n; i ++ ) cin >> w[i];
sort(w + 1, w + 1 + n);
memset(f, 0x3f, sizeof f);
for (int i = 0; i <= n; i ++ ) f[i][0] = 0;
for (int i = 2; i <= n; i ++ )
for (int j = 1; 2 * j <= i; j ++ )
f[i][j] = min(f[i - 1][j], f[i - 2][j - 1] + (w[i] - w[i - 1]) * (w[i] - w[i - 1]));
printf("%lld\n", f[n][m]);
}
return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 110;
int n, t, q;
int v[N], w[N];
int f[N][N], ans;
int main()
{
while (~scanf("%d%d%d", &n, &t, &q)){
if (!n && !t && !q) break;
ans = 0;
for (int i = 1; i <= n; i ++ ) scanf("%d%d", &v[i], &w[i]);
v[0] = 0, w[0] = 1;
memset(f, 0, sizeof f);
int num = 100 / q;
if (100 % q) num ++ ;
for (int k = 1; k <= num; k ++ ){
for (int j = 0; j <= 100; j ++ ){
int next_j = min(100, j + t);
for (int i = 0; i <= n; i ++ ){
if (v[i] + j <= 100)
f[k][next_j] = max(f[k][next_j], f[k - 1][j + v[i]] + w[i]);
}
if (f[k][next_j] >= 100){
ans = k;
break;
}
}
if (ans) break;
}
if (!ans) puts("My god");
else printf("%d\n", ans);
}
return 0;
}