#include <bits/stdc++.h>
using namespace std;
void solve() {
  int n, m, k;
  cin >> n >> m >> k;
  vector<int> dp1(m, 0);
  vector<int> pref_max(m, 0);
  vector<int> suf_max(m, 0);
  vector<vector<int> > a(n);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      int x;
      cin >> x;
      a[i].push_back(x);
    }
  }
  for (int i = 0; i < n; i++) {
    vector<vector<int> > sa1(m);
    vector<vector<int> > sa2(m);
    for (int j = 0; j < m; j++) {
      sa1[j].push_back(0);
      sa2[j].push_back(0);
      for (int ii = 0; ii < k; ii++) {
        if (j + ii < m) {
          sa1[j].push_back(sa1[j][sa1[j].size() - 1] + a[i][j + ii]);
          if (i < n - 1) {
            sa2[j].push_back(sa2[j][sa2[j].size() - 1] + a[i + 1][j + ii]);
          } else {
            sa2[j].push_back(0);
          }
        } else {
          sa1[j].push_back(sa1[j][sa1[j].size() - 1]);
          sa2[j].push_back(sa2[j][sa2[j].size() - 1]);
        }
      }
    }
    vector<int> dp2(m, -1e9);
    for (int j = 0; j < m; j++) {
      if (j - k >= 0) {
        dp2[j] = pref_max[j - k];
      }
      if (j + k < m) {
        dp2[j] = max(dp2[j], suf_max[j + k]);
      }
      for (int ii = max(0, j - k + 1); ii < min(m, j + k); ii++) {
        if (ii < j) {
          dp2[j] = max(dp2[j], dp1[ii] - sa1[j][k - (j - ii)]);
        } else {
          dp2[j] = max(dp2[j], dp1[ii] - sa1[ii][k - (ii - j)]);
        }
      }
      if (i == 0) {
        dp2[j] = sa1[j][k] + sa2[j][k];
      } else {
        dp2[j] += sa1[j][k] + sa2[j][k];
      }
    }
    dp1 = dp2;
    pref_max[0] = dp1[0];
    for (int j = 1; j < m; j++) {
      pref_max[j] = max(pref_max[j - 1], dp1[j]);
    }
    suf_max[m - 1] = dp1[m - 1];
    for (int j = m - 2; j >= 0; j--) {
      suf_max[j] = max(suf_max[j + 1], dp1[j]);
    }
  }
  cout << pref_max[m - 1];
}
int main() {
  ios::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  solve();
  cout << endl;
  return 0;
}
