Problem: You've got a table of size n × m. On the intersection of the i-th row (1 ≤ i ≤ n) and the j-th column (1 ≤ j ≤ m) there is a non-negative integer ai, j. Besides, you've got a non-negative integer k.

Your task is to find such pair of integers (a, b) that meets these conditions: 

  * k ≤ a ≤ n - k + 1; 
  * k ≤ b ≤ m - k + 1; 
  * let's denote the maximum of the function <image> among all integers x and y, that satisfy the inequalities k ≤ x ≤ n - k + 1 and k ≤ y ≤ m - k + 1, as mval; for the required pair of numbers the following equation must hold f(a, b) = mval. 

Input

The first line contains three space-separated integers n, m and k (1 ≤ n, m ≤ 1000, <image>). Next n lines each contains m integers: the j-th number on the i-th line equals ai, j (0 ≤ ai, j ≤ 106).

The numbers in the lines are separated by spaces.

Output

Print the required pair of integers a and b. Separate the numbers by a space.

If there are multiple correct answers, you are allowed to print any of them.

Examples

Input

4 4 2
1 2 3 4
1 1 1 1
2 2 2 2
4 3 2 1


Output

3 2


Input

5 7 3
8 2 3 4 2 3 3
3 4 6 2 3 4 6
8 7 6 8 4 5 7
1 2 3 2 1 3 2
4 5 3 2 1 2 1


Output

3 3

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const int INF = std::numeric_limits<int>::max();
const char* IN_FILE = ".in";
const char* OUT_FILE = ".out";
const int NMAX = 1005;
const int NUM_DIR = 8;
long long a[NMAX][NMAX], trHor[2][NMAX], trVer[2][NMAX];
long long sum[NUM_DIR][NMAX][NMAX];
const int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1};
const int dy[] = {0, -1, -1, -1, 0, 1, 1, 1};
int m, n, k;
bool used[NMAX][NMAX];
bool inside(int x, int y) { return x >= 0 && y >= 0 && x < n && y < m; }
long long calc_sum(int dir, int x, int y, int count) {
  long long ret = sum[dir][x][y];
  x += dx[dir] * count;
  y += dy[dir] * count;
  if (inside(x, y)) ret -= sum[dir][x][y];
  return ret;
}
void readData() {
  cin >> n >> m >> k;
  for (int i = 0; i < int(n); ++i)
    for (int j = 0; j < int(m); ++j) cin >> a[i][j];
}
long long solveNaive() {
  long long ans = -1;
  int ansx = -1, ansy = -1;
  for (int x = k - 1; x <= n - k; ++x) {
    for (int y = k - 1; y <= m - k; ++y) {
      long long currentSum = 0;
      for (int i = 0; i < int(n); ++i) {
        for (int j = 0; j < int(m); ++j) {
          long long w = max(0, k - abs(i - x) - abs(j - y));
          currentSum += w * a[i][j];
        }
      }
      if (currentSum > ans) {
        ans = currentSum;
        ansx = x;
        ansy = y;
      }
    }
  }
  ++ansx, ++ansy;
  cout << "correct " << ansx << " " << ansy << " " << ans << endl;
  return ans;
}
long long solve() {
  for (int i = 0; i < int(NUM_DIR); ++i) {
    for (int u = 0; u < int(NMAX); ++u)
      for (int v = 0; v < int(NMAX); ++v) used[u][v] = false;
    for (int x = 0; x < int(n); ++x) {
      for (int y = 0; y < int(m); ++y) {
        if (used[x][y]) continue;
        int xx = x, yy = y;
        while (inside(xx, yy) && !used[xx][yy]) {
          xx += dx[i];
          yy += dy[i];
        }
        int rev = (i + 4) % NUM_DIR;
        xx += dx[rev];
        yy += dy[rev];
        while (inside(xx, yy)) {
          used[xx][yy] = true;
          sum[i][xx][yy] = a[xx][yy];
          if (inside(xx + dx[i], yy + dy[i])) {
            sum[i][xx][yy] += sum[i][xx + dx[i]][yy + dy[i]];
          }
          xx += dx[rev];
          yy += dy[rev];
        }
      }
    }
  }
  for (int i = 0; i < int(k); ++i) {
    trHor[0][k - 1] += calc_sum(4, k - 1 - i, i, 2 * (i + 1) - 1);
    trHor[1][k - 1] += calc_sum(4, i, k + i - 1, 2 * (k - i) - 1);
  }
  for (int i = k; i <= m - k; ++i) {
    trHor[0][i] = trHor[0][i - 1] + calc_sum(4, 0, i, 2 * k - 1);
    trHor[0][i] -= calc_sum(3, 0, i - 1, k - 1);
    trHor[0][i] -= calc_sum(1, 2 * k - 2, i - 1, k);
    trHor[1][i] = trHor[1][i - 1] - calc_sum(4, 0, i - 1, 2 * k - 1);
    trHor[1][i] += calc_sum(5, 0, i, k);
    trHor[1][i] += calc_sum(7, 2 * k - 2, i, k - 1);
  }
  long long firstSum = 0;
  for (int i = 0; i < int(n); ++i) {
    for (int j = 0; j < int(m); ++j) {
      long long w = max(0, k - abs(i - k + 1) - abs(j - k + 1));
      firstSum += w * a[i][j];
    }
  }
  int ansx = k - 1, ansy = k - 1;
  long long ans = firstSum;
  for (int y = k - 1; y <= m - k; ++y) {
    long long currentSum = firstSum;
    trVer[0][k - 1] = 0;
    trVer[1][k - 1] = 0;
    for (int i = 0; i < int(k); ++i) {
      trVer[0][k - 1] += calc_sum(6, i, y - i, 2 * i + 1);
      trVer[1][k - 1] += calc_sum(6, k - 1 + i, y - k + 1 + i, 2 * (k - i) - 1);
    }
    for (int x = k; x <= n - k; ++x) {
      trVer[0][x] = trVer[0][x - 1] + calc_sum(6, x, y - k + 1, 2 * k - 1);
      trVer[0][x] -= calc_sum(7, x - 1, y - k + 1, k);
      trVer[0][x] -= calc_sum(1, x - 1, y + k - 1, k - 1);
      trVer[1][x] = trVer[1][x - 1] - calc_sum(6, x - 1, y - k + 1, 2 * k - 1);
      trVer[1][x] += calc_sum(5, x, y - k + 1, k);
      trVer[1][x] += calc_sum(3, x, y + k - 1, k - 1);
    }
    for (int x = k - 1; x <= n - k; ++x) {
      if (currentSum > ans) {
        ans = currentSum;
        ansx = x;
        ansy = y;
      }
      currentSum -= trVer[0][x];
      if (x + 1 <= n - k) {
        currentSum += trVer[1][x + 1];
      }
    }
    firstSum -= trHor[0][y];
    if (y + 1 <= m - k) {
      firstSum += trHor[1][y + 1];
    }
  }
  cout << ansx + 1 << " " << ansy + 1 << " " << endl;
  return ans;
}
void init() {
  freopen(IN_FILE, "rt", stdin);
  freopen(OUT_FILE, "wt", stdout);
}
int main() {
  ios_base::sync_with_stdio(false);
  readData();
  solve();
  return 0;
}