#ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #endif #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 #if __cplusplus >= 201103L #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #endif using namespace std; using i64 = int64_t; using vi = vector; using vvi = vector; constexpr i64 MOD = 1000000000; constexpr i64 Z = i64(0); using ii = pair; int main() { int t, n; cin >> t >> n; vi cost(n * 9); vi value(n * 9); for (int i = 0; i < n; i++) { int c; cin >> c; for (int j = 0; j < 9; j++) { cost[i * 9 + j] = c; } } for (int i = 0; i < n; i++) { int v; cin >> v; for (int j = 0; j < 9; j++) { value[i * 9 + j] = v; v /= 2; } } vvi dp(9 * n + 1, vi(t + 1)); for (int i = 0; i < n * 9; i++) { for (int j = 0; j <= t; j++) { if (j - cost[i] >= 0) { dp[i + 1][j] = max(dp[i][j], dp[i][j - cost[i]] + value[i]); } else { dp[i + 1][j] = dp[i][j]; } } } int ans = -1; for (int i = 0; i <= t; i++) { ans = max(ans + Z, dp[9 * n][i]); } cout << ans << endl; }