#include <iostream>
#include <algorithm>
#include <queue>
#include <cstring>
#include <cstdio>
#include <vector>
#include <string>
#include <iterator>
#include <cmath>
#include <deque>
#include <stack>
#include <cctype>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef long double ld;
const int N = 110;
const int INF = 0xfffffff;
const double EPS = 1e-8;
const ll MOD = 1e9 + 7;
const ld PI = acos (-1.0);
#define INFL 0x7fffffffffffffffLL
#define met(a, b) memset(a, b, sizeof(a))
#define put(a) cout << setiosflags(ios::fixed) << setprecision(a)
int g[N][N], dp[N][N][N], n, m, M;
int main ()
{
while (cin >> m >> n >> M)
{
met (g, 0);
met (dp, 0);
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
cin >> g[i][j];
for (int i=1; i<=m; i++)
for (int j=1; j<=n; j++)
{
for (int k=M; k>=0; k--)
{
dp[i][j][k] = max(dp[i-1][j][k], dp[i][j-1][k]);
if (k >= g[i][j])
{
dp[i][j][k] = max (dp[i-1][j][k-g[i][j]]+g[i][j], dp[i][j][k]);
dp[i][j][k] = max (dp[i][j-1][k-g[i][j]]+g[i][j], dp[i][j][k]);
}
}
}
cout << dp[m][n][M] << endl;
}
return 0;
}