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 MAXN = 1000;
void print(const vector<vector<long long> >& mat) {
  for (int i = 0; i < mat.size(); i++) {
    for (int j = 0; j < mat[0].size(); j++) printf("%3I64d ", mat[i][j]);
    printf("\n");
  }
  printf("\n");
}
vector<vector<long long> > solve(const vector<vector<long long> >& mat, int K) {
  int R = mat.size(), C = mat[0].size();
  vector<vector<long long> > diag(R, vector<long long>(C)),
      hor(R, vector<long long>(C)), ver(R, vector<long long>(C)),
      horW(R, vector<long long>(C)), verW(R, vector<long long>(C)),
      tri(R, vector<long long>(C)), triW(R, vector<long long>(C));
  if (K < 1) return triW;
  long long sum = 0;
  for (int jj = 0; jj < R + C - 1; jj++) {
    int i = 0, j = jj;
    while (j >= C) j--, i++;
    sum = 0;
    for (; i < R && j >= 0; i++, j--) diag[i][j] = sum += mat[i][j];
    for (j++, i--; i >= K && j + K < C; j++, i--)
      diag[i][j] -= diag[i - K][j + K];
  }
  for (int i = 0; i < R; i++) {
    sum = 0;
    for (int j = 0; j < C; j++) hor[i][j] = sum += mat[i][j];
    for (int j = C - 1; j >= K; j--) hor[i][j] -= hor[i][j - K];
  }
  for (int j = 0; j < C; j++) {
    sum = 0;
    for (int i = 0; i < R; i++) ver[i][j] = sum += mat[i][j];
    for (int i = R - 1; i >= K; i--) ver[i][j] -= ver[i - K][j];
  }
  for (int i = 0; i < R; i++) {
    sum = 0;
    for (int j = 0; j < K - 1; j++) sum += mat[i][j] * (j + 1);
    for (int j = K - 1; j < C; j++) {
      horW[i][j] = sum += mat[i][j] * K;
      sum -= hor[i][j];
    }
  }
  for (int j = 0; j < C; j++) {
    sum = 0;
    for (int i = 0; i < K - 1; i++) sum += mat[i][j] * (i + 1);
    for (int i = K - 1; i < R; i++) {
      verW[i][j] = sum += mat[i][j] * K;
      sum -= ver[i][j];
    }
  }
  sum = 0;
  for (int i = K - 2; i >= 0; i--)
    for (int j = K - i - 1; j < K - 1; j++) sum += mat[i][j];
  for (int i = K - 1; i < R; i++) {
    long long newSum = sum += hor[i][K - 1] - mat[i][K - 1];
    for (int j = K - 1; j < C; j++) {
      tri[i][j] = newSum += ver[i][j];
      newSum -= diag[i][j - K + 1];
    }
    sum -= diag[i][0] - mat[i - K + 1][K - 1];
  }
  sum = 0;
  for (int i = K - 2; i >= 0; i--)
    for (int j = K - i - 1, w = 1; j < K; j++, w++) sum += mat[i][j] * w;
  for (int i = K - 1; i < R; i++) {
    sum += horW[i][K - 1];
    long long newSum = sum - verW[i][K - 1];
    for (int j = K - 1; j < C; j++) {
      triW[i][j] = newSum += verW[i][j];
      newSum -= tri[i][j];
    }
    sum -= tri[i][K - 1];
  }
  return triW;
}
vector<vector<long long> > rotate90(const vector<vector<long long> >& mat) {
  int R = mat.size(), C = mat[0].size();
  vector<vector<long long> > ret(C, vector<long long>(R));
  for (int i = 0; i < R; i++)
    for (int j = 0; j < C; j++) ret[C - j - 1][i] = mat[i][j];
  return ret;
}
vector<vector<long long> > rotate270(const vector<vector<long long> >& mat) {
  return rotate90(rotate90(rotate90(mat)));
}
vector<vector<long long> > shiftUp(const vector<vector<long long> >& mat) {
  int R = mat.size(), C = mat[0].size();
  vector<vector<long long> > ret(R, vector<long long>(C));
  for (int i = 0; i < R - 1; i++)
    for (int j = 0; j < C; j++) ret[i][j] = mat[i + 1][j];
  return ret;
}
vector<vector<long long> > shiftLeft(const vector<vector<long long> >& mat) {
  int R = mat.size(), C = mat[0].size();
  vector<vector<long long> > ret(R, vector<long long>(C));
  for (int i = 0; i < R; i++)
    for (int j = 0; j < C - 1; j++) ret[i][j] = mat[i][j + 1];
  return ret;
}
void add(vector<vector<long long> >& me,
         const vector<vector<long long> >& her) {
  int R = me.size(), C = her[0].size();
  for (int i = 0; i < R; i++)
    for (int j = 0; j < C; j++) me[i][j] += her[i][j];
  return;
}
int main() {
  int R, C, K;
  scanf("%d%d%d", &R, &C, &K);
  vector<vector<long long> > mat(R, vector<long long>(C)), ret = mat;
  for (int i = 0; i < R; i++)
    for (int j = 0; j < C; j++) scanf("%I64d", &mat[i][j]);
  const int du[] = {0, 0, 1, 1};
  const int dl[] = {0, 1, 1, 0};
  const int dk[] = {0, 1, 2, 1};
  for (int i = 0; i < 4; i++) {
    vector<vector<long long> > temp = solve(mat, K - dk[i]);
    mat = rotate90(mat);
    for (int j = 0; j < i; j++) temp = rotate270(temp);
    if (dl[i]) temp = shiftLeft(temp);
    if (du[i]) temp = shiftUp(temp);
    add(ret, temp);
  }
  pair<long long, pair<int, int> > ans(-1e18, make_pair(0, 0));
  for (int i = K - 1; i + K - 1 < R; i++)
    for (int j = K - 1; j + K - 1 < C; j++)
      ans = max(ans, make_pair(ret[i][j], make_pair(i + 1, j + 1)));
  printf("%d %d\n", ans.second.first, ans.second.second);
  return 0;
}