//include //------------------------------------------ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define SHOW_VECTOR(v) {std::cerr << #v << "\t:";for(const auto& xxx : v){std::cerr << xxx << " ";}std::cerr << "\n";} #define SHOW_MAP(v){std::cerr << #v << endl; for(const auto& xxx: v){std::cerr << xxx.first << " " << xxx.second << "\n";}} using LL = long long; //------------------------------------------ //------------------------------------------ constexpr int MAX = 550; int main() { int N, M, K; cin >> N >> M >> K; vector> A(N, vector(M)); for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) cin >> A[i][j]; vector> dp(N + 1, vector(MAX, 0)); dp[0][0] = 1; for (int i = 0; i < N; i++) { for (int j = 0; j < MAX; j++) { for (int k = 0; k < M; k++) { int to = j + A[i][k]; if (to < MAX) { dp[i + 1][to] |= dp[i][j]; } } } } int ans = -1; for (int i = 0; i < MAX; i++) { if (dp[N][i] && i <= K) { ans = i; } } if (ans == -1)cout << -1 << endl; else cout << K - ans << endl; return 0; }