#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e4 + 10;
const int MAX = 30;
const int inf = 0x3f3f3f3f;
int f[60][maxn];
int sum[60][maxn];
int ani[60][maxn];
struct re {
  int x, y, z, w;
} a[maxn * 4];
void up(int k) { a[k].z = max(a[k * 2].z, a[k * 2 + 1].z); }
void down(int k) {
  a[k * 2].w += a[k].w;
  a[k * 2 + 1].w += a[k].w;
  a[k * 2].z += a[k].w;
  a[k * 2 + 1].z += a[k].w;
  a[k].w = 0;
}
void build(int k, int l, int r, int lay) {
  a[k].x = l, a[k].y = r, a[k].w = 0;
  if (l == r) {
    a[k].z = f[lay][l];
    return;
  }
  int mid = (l + r) / 2;
  build(k * 2, l, mid, lay);
  build(k * 2 + 1, mid + 1, r, lay);
  up(k);
}
void update(int k, int l, int r, int w) {
  if (a[k].y < l || a[k].x > r) return;
  if (l <= a[k].x && a[k].y <= r) {
    a[k].w += w;
    a[k].z += w;
    return;
  }
  if (a[k].w) down(k);
  update(k * 2, l, r, w);
  update(k * 2 + 1, l, r, w);
  up(k);
}
int query(int k, int l, int r) {
  if (a[k].y < l || a[k].x > r) return 0;
  if (l <= a[k].x && a[k].y <= r) {
    return a[k].z;
  }
  if (a[k].w) down(k);
  return max(query(k * 2, l, r), query(k * 2 + 1, l, r));
}
signed main() {
  int n, m, k;
  cin >> n >> m >> k;
  for (int i = (1); i <= (n); ++i) {
    for (int j = (1); j <= (m); ++j)
      scanf("%d", &ani[i][j]), sum[i][j] = sum[i][j - 1] + ani[i][j];
  }
  for (int i = (1); i <= (m - k + 1); ++i) {
    f[1][i] =
        sum[1][i + k - 1] - sum[1][i - 1] + sum[2][i + k - 1] - sum[2][i - 1];
  }
  for (int i = (2); i <= (n); ++i) {
    build(1, 1, m - k + 1, i - 1);
    int x = 0;
    for (int j = (k); j >= (1); --j) {
      x += ani[i][j];
      update(1, j, j, -x);
    }
    f[i][1] = query(1, 1, m) + sum[i + 1][1 + k - 1] - sum[i + 1][0] +
              sum[i][1 + k - 1] - sum[i][0];
    for (int j = (2); j <= (m - k + 1); ++j) {
      update(1, max(1, j - 1 - k + 1), j - 1, ani[i][j - 1]);
      update(1, j + k - 1 - k + 1, j + k - 1, -ani[i][j + k - 1]);
      f[i][j] = query(1, 1, m) + sum[i + 1][j + k - 1] - sum[i + 1][j - 1] +
                sum[i][j + k - 1] - sum[i][j - 1];
    }
  }
  auto ans = max_element(f[n] + 1, f[n] + 1 + m - k + 1);
  cout << *ans;
}
