/* -*- coding: utf-8 -*- * * 914.cc: No.914 Omiyage - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 10; const int MAX_M = 10; const int MAX_K = 500; /* typedef */ /* global variables */ bool dp[2][MAX_K + 1]; /* subroutines */ /* main */ int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); dp[0][0] = true; int cur = 0, nxt = 1; for (int i = 0; i < n; i++) { memset(dp[nxt], 0, sizeof(dp[nxt])); for (int j = 0; j < m; j++) { int a; scanf("%d", &a); for (int l = 0; l + a <= k; l++) dp[nxt][l + a] = (dp[nxt][l + a] || dp[cur][l]); } swap(cur, nxt); } int l = k; while (l >= 0 && !dp[cur][l]) l--; printf("%d\n", (l < 0) ? -1 : k - l); return 0; }