#include #include #include using namespace std; using vi = vector; void ins() {} templatevoid ins(T& v,Rest&... rest){cin>>v;ins(rest...);} #define rep(i,n) for(int i=0,_i=(n);i<_i;++i) #define all(f,c,...) (([&](decltype((c)) cccc) { return (f)(begin(cccc), end(cccc), ## __VA_ARGS__); })(c)) int N, M, K; vector A, dp; int dfs(int i, int k) { // dfs(i, k) = i番目以降で、残りk円で渡すといくら残るか? if (i == N) return k; if (dp[i][k] != -1) return dp[i][k]; int ans = k; rep(j, M) { int a = A[i][j] - A[i][0]; if (k >= a) ans = min(ans, dfs(i + 1, k - a)); } return dp[i][k] = ans; } int main() { ins(N, M, K); A.resize(N, vi(M)); dp.resize(N, vi(501, -1)); int sum = 0; rep(i, N) { rep(j, M) { cin >> A[i][j]; } all(sort, A[i]); sum += A[i][0]; } if (sum > K) { cout << -1 << endl; return 0; } cout << dfs(0, K - sum) << endl; return 0; }