#include <bits/stdc++.h>
 
#define ll long long 
#define el cout << '\n'
#define BIT(n) ((1ll) << (n))
#define bit(mask, i) (((mask) >> (i)) & 1)
 
using namespace std;
 
const int maxn = 1e3;
const int maxk = 2e3;
const int maxc = 4;
const ll INF = 1e18;
 
int n, m, k;
ll dp[2][BIT(maxc) + 5][maxk + 10], a[maxn + 10][maxc + 10], sum[maxn + 10][BIT(maxc) + 5], ans = -INF;
bool ok[BIT(maxc) + 5];
 
void maximize(ll &a, ll b)
{
    a = max(a, b);
}
 
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    if (fopen("DOMINE.INP", "r"))
    {
        freopen("DOMINE.INP", "r", stdin);
        freopen("DOMINE.OUT", "w", stdout);
    }
 
    cin >> n >> m >> k;
    for (int i = 1; i <= n; i++)
    {
        for (int j = 0; j < m; j++)
            cin >> a[i][j];
        for (int mask = 0; mask < BIT(m); mask++)
        {
            for (int j = 0; j < m; j++)
                sum[i][mask] += bit(mask, j) * a[i][j];
        }
    }
    for (int mask = 0; mask < BIT(m); mask++)
    {
        ok[mask] = 1;
        for (int i = 0; i < m; i++)
            if (bit(mask, i))
            {
                if (bit(mask, i + 1))
                    i++;
                else
                {
                    ok[mask] = 0;
                    break;
                }
            }
    }
    for (int mask = 0; mask < BIT(m); mask++)
        if (ok[mask])
            dp[1][mask][__builtin_popcount(mask) / 2] = sum[1][mask];
    for (int i = 1; i < n; i++)
    {
        for (int mask = 0; mask < BIT(m); mask++)
            for (int cnt = 0; cnt <= k; cnt++)
                dp[i & 1 ^ 1][mask][cnt] = INF;
        for (int mask = 0; mask < BIT(m); mask++)
            for (int cnt = 0; cnt <= k; cnt++)
            {
                if (dp[i & 1][mask][cnt] == INF)
                    continue;
                int submask = (BIT(m) - 1) ^ mask;
                bool is_break_ = 0;
                for (int mask_col = submask; ; mask_col = (max(0, mask_col - 1)) & submask)
                {
                    if (is_break_ && mask_col == 0)
                        break;
                    is_break_ = mask_col == 0;
                    int submask_2 = (BIT(m) - 1) ^ mask_col;
                    bool is_break = 0;
                    for (int mask_row = submask_2; ; mask_row = (max(0, mask_row - 1)) & submask_2)
                    {
                        if (is_break && mask_row == 0)
                            break;
                        is_break = mask_row == 0;
                        if (!ok[mask_row])
                            continue;
                        int next_cnt = cnt + __builtin_popcount(mask_col) + __builtin_popcount(mask_row) / 2;
                        int next_mask = mask_col | mask_row;
                        if (next_cnt > k)
                            continue;
                        ll s = dp[i & 1][mask][cnt] + sum[i][mask_col] + sum[i + 1][mask_row | mask_col];
                        // cout << mask << ' ' << mask_col << ' ' << mask_row << ' ' << cnt << ' ' << next_cnt << ' ' << s, el;
                        maximize(dp[i & 1 ^ 1][next_mask][next_cnt], s);
                    }
                }
            }
    }
    for (int mask = 0; mask < BIT(m); mask++)
        maximize(ans, dp[n & 1][mask][k]);
    cout << ans;
}