#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream>
#include <random>
#include<map>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <cassert>
#include<fstream>
#include <unordered_map>
#include <cstdlib>
#include <complex>
#include <cctype>
#include <bitset>
using namespace std;
typedef string::const_iterator State;
#define Ma_PI 3.141592653589793
#define eps 1e-5
#define LONG_INF 2000000000000000000LL
#define GOLD 1.61803398874989484820458
#define MAX_MOD 1000000007LL
#define GYAKU 500000004LL
#define MOD 998244353LL
#define seg_size 262144*2
#define REP(a,b) for(long long a = 0;a < b;++a)
int can_use[20][600];
int main() {
	int n, m, k;
	cin >> n >> m >> k;
	can_use[0][k] = 1;
	REP(i, n) {
		vector<int> inputs;
		REP(q, m) {
			int a;
			cin >> a;
			inputs.push_back(a);
		}
		REP(j, k + 1) {
			if (can_use[i][j] == 0) continue;
			REP(t, inputs.size()) {
				int target = j - inputs[t];
				if (target >= 0) {
					can_use[i + 1][target] = 1;
				}
			}
		}
	}
	REP(i, k + 1) {
		if (can_use[n][i]) {
			cout << i << endl;
			return 0;
		}
	}
	cout << -1 << endl;
}