#include using namespace std; typedef long long ll; #define rep(i, n) for(int i = 0; i < (int)(n); i++) #define all(x) (x).begin(),(x).end() const double PI = acos(-1); const ll MOD = 1000000007; using Graph = vector>; int N,M,K; vector> A; vector AL,AR; void dfs(int k,int O,int n, int x, vector &ALR) { if (O + k == n) { ALR.push_back(x); return; } rep(i,M) { dfs(k+1,O,n,x+A[O+k][i],ALR); } return; } int main() { cin >> N >> M >> K; A.resize(N, vector(M)); rep(i,N) { rep(j,M) cin >> A[i][j]; } dfs(0,0,N/2,0,AL); dfs(0,N/2,N,0,AR); sort(all(AL)); sort(all(AR)); int p = AL.size(); int q = AR.size(); int ans = -1; rep(i,p) { if (AL[i] + AR[0] > K) continue; else if (AL[i] + AR[q-1] <= K) ans = max(ans,AL[i] + AR[q-1]); else { int j = upper_bound(all(AR),K - AL[i]) - AR.begin(); j--; ans = max(ans,AL[i] + AR[j]); } } if (ans != -1) cout << K - ans << endl; else cout << -1 << endl; }