// Author: 4uckd3v - Nguyen Cao Duc
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAX_M = 1000;
const int MAX_N = 4;
const int MAX_K = 2000;
const int MOD = 1e9 + 7;
const ll INF = 1e18;
template <class X, class Y>
bool maximize(X& x, const Y& y) {
if (x >= y) return false;
x = y;
return true;
};
int m, n, k;
int a[MAX_M + 5][MAX_N + 5];
int sum[MAX_M + 5][1 << MAX_N];
ll nxt[MAX_K + 5][1 << MAX_N], cur[MAX_K + 5][1 << MAX_N];
bool offBit(int mask, int i) {
return !(mask >> i & 1);
};
void baseCase() {
cur[0][0] = 0;
for (int i = 0; i < n; i++) {
if (i + 1 < n) cur[1][(1 << i) | (1 << (i + 1))] = a[1][i] + a[1][i + 1];
};
if (n == 4) cur[2][(1 << n) - 1] = sum[1][(1 << n) - 1];
};
void transition(int i, int j, int mask) {
ll& curDp = cur[j][mask];
maximize(nxt[j][0], curDp);
if (n >= 1) {
for (int p = 0; p < n; p++) {
if (offBit(mask, p)) maximize(nxt[j + 1][1 << p], curDp + a[i][p] + a[i + 1][p]);
};
};
if (n >= 2) {
for (int p = 0; p + 1 < n; p++) {
int nextMask = (1 << p) | (1 << (p + 1));
// (2x1, 2x1)
if (j + 2 <= k && offBit(mask, p) && offBit(mask, p + 1))
maximize(nxt[j + 2][nextMask], curDp + sum[i + 1][nextMask] + sum[i][nextMask]);
// (1x2)
if (j + 1 <= k)
maximize(nxt[j + 1][nextMask], curDp + sum[i + 1][nextMask]);
};
};
if (n >= 3) {
for (int p = 0; p < n; p++) {
// (2x1, 0, 2x1)
if (p + 2 < n && j + 2 <= k && offBit(mask, p) && offBit(mask, p + 2)) {
int nextMask = (1 << p) | (1 << (p + 2));
maximize(nxt[j + 2][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (2x1, 2x1, 2x1)
if (p + 2 < n && j + 3 <= k && offBit(mask, p) && offBit(mask, p + 1) && offBit(mask, p + 2)) {
int nextMask = (1 << p) | (1 << (p + 1)) | (1 << (p + 2));
maximize(nxt[j + 3][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (2x1, 1x2)
if (p + 2 < n && j + 2 <= k && offBit(mask, p)) {
int nextMask = (1 << p) | (1 << (p + 1)) | (1 << (p + 2));
maximize(nxt[j + 2][nextMask], curDp + a[i][p] + sum[i + 1][nextMask]);
};
// (1x2, 2x1)
if (p - 2 >= 0 && j + 2 <= k && offBit(mask, p)) {
int nextMask = (1 << p) | (1 << (p - 1)) | (1 << (p - 2));
maximize(nxt[j + 2][nextMask], curDp + a[i][p] + sum[i + 1][nextMask]);
};
};
};
if (n == 4) {
// (2x1, 2x1, 2x1, 2x1)
if (mask == 0 && j + 4 <= k) {
int nextMask = (1 << n) - 1;
maximize(nxt[j + 4][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (1x2, 1x2)
if (j + 2 <= k) {
int nextMask = (1 << n) - 1;
maximize(nxt[j + 2][nextMask], curDp + sum[i + 1][nextMask]);
};
// (1x2, 2x1, 2x1)
if (j + 3 <= k && offBit(mask, 2) && offBit(mask, 3)) {
int nextMask = (1 << n) - 1;
maximize(nxt[j + 3][nextMask], curDp + a[i][2] + a[i][3] + sum[i + 1][nextMask]);
};
// (2x1, 2x1, 1x2)
if (j + 3 <= k && offBit(mask, 0) && offBit(mask, 1)) {
int nextMask = (1 << n) - 1;
maximize(nxt[j + 3][nextMask], curDp + a[i][0] + a[i][1] + sum[i + 1][nextMask]);
};
// (2x1, 1x2, 2x1)
if (j + 3 <= k && offBit(mask, 0) && offBit(mask, 3)) {
int nextMask = (1 << n) - 1;
maximize(nxt[j + 3][nextMask], curDp + a[i][0] + a[i][3] + sum[i + 1][nextMask]);
};
for (int p = 0; p < n; p++) {
if (offBit(mask, p)) {
// (2x1, 0, 0, 2x1)
if (p + 3 < n && j + 2 <= k && offBit(mask, p + 3)) {
int nextMask = (1 << p) | (1 << (p + 3));
maximize(nxt[j + 2][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (2x1, 2x1, 0, 2x1)
if (p + 3 < n && j + 3 <= k && offBit(mask, p + 1) && offBit(mask, p + 3)) {
int nextMask = (1 << p) | (1 << (p + 1)) | (1 << (p + 3));
maximize(nxt[j + 3][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (2x1, 0, 2x1, 2x1)
if (p + 3 < n && j + 3 <= k && offBit(mask, p + 2) && offBit(mask, p + 3)) {
int nextMask = (1 << p) | (1 << (p + 2)) | (1 << (p + 3));
maximize(nxt[j + 3][nextMask], curDp + sum[i][nextMask] + sum[i + 1][nextMask]);
};
// (2x1, 0, 1x2)
if (p + 3 < n && j + 2 <= k) {
int nextMask = (1 << p) | (1 << (p + 2)) | (1 << (p + 3));
maximize(nxt[j + 2][nextMask], curDp + a[i][p] + sum[i + 1][nextMask]);
};
// (1x2, 0, 2x1)
if (p - 3 >= 0 && j + 2 <= k) {
int nextMask = (1 << p) | (1 << (p - 2)) | (1 << (p - 3));
maximize(nxt[j + 2][nextMask], curDp + a[i][p] + sum[i + 1][nextMask]);
};
};
};
};
};
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen("G.INP", "r")) {
freopen("G.INP", "r", stdin);
freopen("G.OUT", "w", stdout);
};
if (fopen("domine.INP", "r")) {
freopen("domine.INP", "r", stdin);
freopen("domine.OUT", "w", stdout);
};
cin >> m >> n >> k;
for (int i = 1; i <= m; i++) {
for (int j = 0; j < n; j++) {
cin >> a[i][j];
};
for (int mask = 1; mask < (1 << n); mask++) {
int j = __builtin_ctz(mask);
sum[i][mask] = sum[i][mask ^ (1 << j)] + a[i][j];
};
};
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= k; j++) {
for (int mask = 0; mask < (1 << n); mask++) {
cur[j][mask] = nxt[j][mask] = -INF;
};
};
};
baseCase();
for (int i = 1; i < m; i++) {
for (int j = 0; j <= k; j++) {
for (int mask = 0; mask < (1 << n); mask++) {
if (cur[j][mask] == -INF) continue;
transition(i, j, mask);
};
};
for (int j = 0; j <= k; j++) {
for (int mask = 0; mask < (1 << n); mask++) {
cur[j][mask] = nxt[j][mask];
nxt[j][mask] = -INF;
};
};
};
ll res = -INF;
for (int mask = 0; mask < (1 << n); mask++) maximize(res, cur[k][mask]);
cout << res << '\n';
};
Ly8gQXV0aG9yOiA0dWNrZDN2IC0gTmd1eWVuIENhbyBEdWMKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKCmNvbnN0IGludCBNQVhfTSA9IDEwMDA7CmNvbnN0IGludCBNQVhfTiA9IDQ7CmNvbnN0IGludCBNQVhfSyA9IDIwMDA7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3Owpjb25zdCBsbCBJTkYgPSAxZTE4OwoKdGVtcGxhdGUgPGNsYXNzIFgsIGNsYXNzIFk+CmJvb2wgbWF4aW1pemUoWCYgeCwgY29uc3QgWSYgeSkgewogICAgaWYgKHggPj0geSkgcmV0dXJuIGZhbHNlOwogICAgeCA9IHk7CiAgICByZXR1cm4gdHJ1ZTsKfTsKCmludCBtLCBuLCBrOwppbnQgYVtNQVhfTSArIDVdW01BWF9OICsgNV07CmludCBzdW1bTUFYX00gKyA1XVsxIDw8IE1BWF9OXTsKbGwgbnh0W01BWF9LICsgNV1bMSA8PCBNQVhfTl0sIGN1cltNQVhfSyArIDVdWzEgPDwgTUFYX05dOwoKYm9vbCBvZmZCaXQoaW50IG1hc2ssIGludCBpKSB7CiAgICByZXR1cm4gIShtYXNrID4+IGkgJiAxKTsKfTsKCnZvaWQgYmFzZUNhc2UoKSB7CiAgICBjdXJbMF1bMF0gPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpZiAoaSArIDEgPCBuKSBjdXJbMV1bKDEgPDwgaSkgfCAoMSA8PCAoaSArIDEpKV0gPSBhWzFdW2ldICsgYVsxXVtpICsgMV07CiAgICB9OwogICAgaWYgKG4gPT0gNCkgY3VyWzJdWygxIDw8IG4pIC0gMV0gPSBzdW1bMV1bKDEgPDwgbikgLSAxXTsKfTsKCnZvaWQgdHJhbnNpdGlvbihpbnQgaSwgaW50IGosIGludCBtYXNrKSB7CiAgICBsbCYgY3VyRHAgPSBjdXJbal1bbWFza107CiAgICBtYXhpbWl6ZShueHRbal1bMF0sIGN1ckRwKTsKCiAgICBpZiAobiA+PSAxKSB7CiAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBuOyBwKyspIHsKICAgICAgICAgICAgaWYgKG9mZkJpdChtYXNrLCBwKSkgbWF4aW1pemUobnh0W2ogKyAxXVsxIDw8IHBdLCBjdXJEcCArIGFbaV1bcF0gKyBhW2kgKyAxXVtwXSk7CiAgICAgICAgfTsKICAgIH07CgogICAgaWYgKG4gPj0gMikgewogICAgICAgIGZvciAoaW50IHAgPSAwOyBwICsgMSA8IG47IHArKykgewogICAgICAgICAgICBpbnQgbmV4dE1hc2sgPSAoMSA8PCBwKSB8ICgxIDw8IChwICsgMSkpOwogICAgICAgICAgICAvLyAoMngxLCAyeDEpCiAgICAgICAgICAgIGlmIChqICsgMiA8PSBrICYmIG9mZkJpdChtYXNrLCBwKSAmJiBvZmZCaXQobWFzaywgcCArIDEpKQogICAgICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAyXVtuZXh0TWFza10sIGN1ckRwICsgc3VtW2kgKyAxXVtuZXh0TWFza10gKyBzdW1baV1bbmV4dE1hc2tdKTsKCiAgICAgICAgICAgIC8vICgxeDIpCiAgICAgICAgICAgIGlmIChqICsgMSA8PSBrKQogICAgICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAxXVtuZXh0TWFza10sIGN1ckRwICsgc3VtW2kgKyAxXVtuZXh0TWFza10pOwogICAgICAgIH07CiAgICB9OwogICAgaWYgKG4gPj0gMykgewogICAgICAgIGZvciAoaW50IHAgPSAwOyBwIDwgbjsgcCsrKSB7CiAgICAgICAgICAgIC8vICgyeDEsIDAsIDJ4MSkKICAgICAgICAgICAgaWYgKHAgKyAyIDwgbiAmJiBqICsgMiA8PSBrICYmIG9mZkJpdChtYXNrLCBwKSAmJiBvZmZCaXQobWFzaywgcCArIDIpKSB7CiAgICAgICAgICAgICAgICBpbnQgbmV4dE1hc2sgPSAoMSA8PCBwKSB8ICgxIDw8IChwICsgMikpOwogICAgICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAyXVtuZXh0TWFza10sIGN1ckRwICsgc3VtW2ldW25leHRNYXNrXSArIHN1bVtpICsgMV1bbmV4dE1hc2tdKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgLy8gKDJ4MSwgMngxLCAyeDEpCiAgICAgICAgICAgIGlmIChwICsgMiA8IG4gJiYgaiArIDMgPD0gayAmJiBvZmZCaXQobWFzaywgcCkgJiYgb2ZmQml0KG1hc2ssIHAgKyAxKSAmJiBvZmZCaXQobWFzaywgcCArIDIpKSB7CiAgICAgICAgICAgICAgICBpbnQgbmV4dE1hc2sgPSAoMSA8PCBwKSB8ICgxIDw8IChwICsgMSkpIHwgKDEgPDwgKHAgKyAyKSk7CiAgICAgICAgICAgICAgICBtYXhpbWl6ZShueHRbaiArIDNdW25leHRNYXNrXSwgY3VyRHAgKyBzdW1baV1bbmV4dE1hc2tdICsgc3VtW2kgKyAxXVtuZXh0TWFza10pOwogICAgICAgICAgICB9OwogICAgICAgICAgICAvLyAoMngxLCAxeDIpCiAgICAgICAgICAgIGlmIChwICsgMiA8IG4gJiYgaiArIDIgPD0gayAmJiBvZmZCaXQobWFzaywgcCkpIHsKICAgICAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IHApIHwgKDEgPDwgKHAgKyAxKSkgfCAoMSA8PCAocCArIDIpKTsKICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgMl1bbmV4dE1hc2tdLCBjdXJEcCArIGFbaV1bcF0gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIC8vICgxeDIsIDJ4MSkKICAgICAgICAgICAgaWYgKHAgLSAyID49IDAgJiYgaiArIDIgPD0gayAmJiBvZmZCaXQobWFzaywgcCkpIHsKICAgICAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IHApIHwgKDEgPDwgKHAgLSAxKSkgfCAoMSA8PCAocCAtIDIpKTsKICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgMl1bbmV4dE1hc2tdLCBjdXJEcCArIGFbaV1bcF0gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH07CgogICAgaWYgKG4gPT0gNCkgewogICAgICAgIC8vICgyeDEsIDJ4MSwgMngxLCAyeDEpCiAgICAgICAgaWYgKG1hc2sgPT0gMCAmJiBqICsgNCA8PSBrKSB7CiAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IG4pIC0gMTsKICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyA0XVtuZXh0TWFza10sIGN1ckRwICsgc3VtW2ldW25leHRNYXNrXSArIHN1bVtpICsgMV1bbmV4dE1hc2tdKTsKICAgICAgICB9OwoKICAgICAgICAvLyAoMXgyLCAxeDIpCiAgICAgICAgaWYgKGogKyAyIDw9IGspIHsKICAgICAgICAgICAgaW50IG5leHRNYXNrID0gKDEgPDwgbikgLSAxOwogICAgICAgICAgICBtYXhpbWl6ZShueHRbaiArIDJdW25leHRNYXNrXSwgY3VyRHAgKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgfTsKICAgICAgICAvLyAoMXgyLCAyeDEsIDJ4MSkKICAgICAgICBpZiAoaiArIDMgPD0gayAmJiBvZmZCaXQobWFzaywgMikgJiYgb2ZmQml0KG1hc2ssIDMpKSB7CiAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IG4pIC0gMTsKICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAzXVtuZXh0TWFza10sIGN1ckRwICsgYVtpXVsyXSArIGFbaV1bM10gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgfTsKICAgICAgICAvLyAoMngxLCAyeDEsIDF4MikKICAgICAgICBpZiAoaiArIDMgPD0gayAmJiBvZmZCaXQobWFzaywgMCkgJiYgb2ZmQml0KG1hc2ssIDEpKSB7CiAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IG4pIC0gMTsKICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAzXVtuZXh0TWFza10sIGN1ckRwICsgYVtpXVswXSArIGFbaV1bMV0gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgfTsKICAgICAgICAvLyAoMngxLCAxeDIsIDJ4MSkKICAgICAgICBpZiAoaiArIDMgPD0gayAmJiBvZmZCaXQobWFzaywgMCkgJiYgb2ZmQml0KG1hc2ssIDMpKSB7CiAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IG4pIC0gMTsKICAgICAgICAgICAgbWF4aW1pemUobnh0W2ogKyAzXVtuZXh0TWFza10sIGN1ckRwICsgYVtpXVswXSArIGFbaV1bM10gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgfTsKCiAgICAgICAgZm9yIChpbnQgcCA9IDA7IHAgPCBuOyBwKyspIHsKICAgICAgICAgICAgaWYgKG9mZkJpdChtYXNrLCBwKSkgewogICAgICAgICAgICAgICAgLy8gKDJ4MSwgMCwgMCwgMngxKQogICAgICAgICAgICAgICAgaWYgKHAgKyAzIDwgbiAmJiBqICsgMiA8PSBrICYmIG9mZkJpdChtYXNrLCBwICsgMykpIHsKICAgICAgICAgICAgICAgICAgICBpbnQgbmV4dE1hc2sgPSAoMSA8PCBwKSB8ICgxIDw8IChwICsgMykpOwogICAgICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgMl1bbmV4dE1hc2tdLCBjdXJEcCArIHN1bVtpXVtuZXh0TWFza10gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLy8gKDJ4MSwgMngxLCAwLCAyeDEpCiAgICAgICAgICAgICAgICBpZiAocCArIDMgPCBuICYmIGogKyAzIDw9IGsgJiYgb2ZmQml0KG1hc2ssIHAgKyAxKSAmJiBvZmZCaXQobWFzaywgcCArIDMpKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IG5leHRNYXNrID0gKDEgPDwgcCkgfCAoMSA8PCAocCArIDEpKSB8ICgxIDw8IChwICsgMykpOwogICAgICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgM11bbmV4dE1hc2tdLCBjdXJEcCArIHN1bVtpXVtuZXh0TWFza10gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLy8gKDJ4MSwgMCwgMngxLCAyeDEpCiAgICAgICAgICAgICAgICBpZiAocCArIDMgPCBuICYmIGogKyAzIDw9IGsgJiYgb2ZmQml0KG1hc2ssIHAgKyAyKSAmJiBvZmZCaXQobWFzaywgcCArIDMpKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IG5leHRNYXNrID0gKDEgPDwgcCkgfCAoMSA8PCAocCArIDIpKSB8ICgxIDw8IChwICsgMykpOwogICAgICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgM11bbmV4dE1hc2tdLCBjdXJEcCArIHN1bVtpXVtuZXh0TWFza10gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLy8gKDJ4MSwgMCwgMXgyKQogICAgICAgICAgICAgICAgaWYgKHAgKyAzIDwgbiAmJiBqICsgMiA8PSBrKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IG5leHRNYXNrID0gKDEgPDwgcCkgfCAoMSA8PCAocCArIDIpKSB8ICgxIDw8IChwICsgMykpOwogICAgICAgICAgICAgICAgICAgIG1heGltaXplKG54dFtqICsgMl1bbmV4dE1hc2tdLCBjdXJEcCArIGFbaV1bcF0gKyBzdW1baSArIDFdW25leHRNYXNrXSk7CiAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgLy8gKDF4MiwgMCwgMngxKQogICAgICAgICAgICAgICAgaWYgKHAgLSAzID49IDAgJiYgaiArIDIgPD0gaykgewogICAgICAgICAgICAgICAgICAgIGludCBuZXh0TWFzayA9ICgxIDw8IHApIHwgKDEgPDwgKHAgLSAyKSkgfCAoMSA8PCAocCAtIDMpKTsKICAgICAgICAgICAgICAgICAgICBtYXhpbWl6ZShueHRbaiArIDJdW25leHRNYXNrXSwgY3VyRHAgKyBhW2ldW3BdICsgc3VtW2kgKyAxXVtuZXh0TWFza10pOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfTsKfTsKCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpZiAoZm9wZW4oIkcuSU5QIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oIkcuSU5QIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiRy5PVVQiLCAidyIsIHN0ZG91dCk7CiAgICB9OwogICAgaWYgKGZvcGVuKCJkb21pbmUuSU5QIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oImRvbWluZS5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJkb21pbmUuT1VUIiwgInciLCBzdGRvdXQpOwogICAgfTsKCiAgICBjaW4gPj4gbSA+PiBuID4+IGs7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspIHsKICAgICAgICAgICAgY2luID4+IGFbaV1bal07CiAgICAgICAgfTsKCiAgICAgICAgZm9yIChpbnQgbWFzayA9IDE7IG1hc2sgPCAoMSA8PCBuKTsgbWFzaysrKSB7CiAgICAgICAgICAgIGludCBqID0gX19idWlsdGluX2N0eihtYXNrKTsKICAgICAgICAgICAgc3VtW2ldW21hc2tdID0gc3VtW2ldW21hc2sgXiAoMSA8PCBqKV0gKyBhW2ldW2pdOwogICAgICAgIH07CiAgICB9OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG07IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IGs7IGorKykgewogICAgICAgICAgICBmb3IgKGludCBtYXNrID0gMDsgbWFzayA8ICgxIDw8IG4pOyBtYXNrKyspIHsKICAgICAgICAgICAgICAgIGN1cltqXVttYXNrXSA9IG54dFtqXVttYXNrXSA9IC1JTkY7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH07CgogICAgYmFzZUNhc2UoKTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSB7CiAgICAgICAgICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbik7IG1hc2srKykgewogICAgICAgICAgICAgICAgaWYgKGN1cltqXVttYXNrXSA9PSAtSU5GKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIHRyYW5zaXRpb24oaSwgaiwgbWFzayk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPD0gazsgaisrKSB7CiAgICAgICAgICAgIGZvciAoaW50IG1hc2sgPSAwOyBtYXNrIDwgKDEgPDwgbik7IG1hc2srKykgewogICAgICAgICAgICAgICAgY3VyW2pdW21hc2tdID0gbnh0W2pdW21hc2tdOwogICAgICAgICAgICAgICAgbnh0W2pdW21hc2tdID0gLUlORjsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfTsKCiAgICBsbCByZXMgPSAtSU5GOwogICAgZm9yIChpbnQgbWFzayA9IDA7IG1hc2sgPCAoMSA8PCBuKTsgbWFzaysrKSBtYXhpbWl6ZShyZXMsIGN1cltrXVttYXNrXSk7CgogICAgY291dCA8PCByZXMgPDwgJ1xuJzsKfTs=