#include #include #include int main() { using namespace std; int t, n; cin >> t >> n; vector C(n), V(n); for (auto &e : C) { cin >> e; } for (auto &e : V) { cin >> e; } vector> attractions; for (int i = 0; i < n; i++) { while (V[i] > 0) { attractions.emplace_back(C[i], V[i]); V[i] /= 2; } } n = attractions.size(); vector dp(n + 1, vector(t + 1, -1)); dp[0][0] = 0; for (int i = 0; i < n; i++) { auto [c, v] = attractions[i]; for (int j = 0; j < t + 1; j++) { if (dp[i][j] == -1) { continue; } dp[i + 1][j] = max(dp[i + 1][j], dp[i][j]); if (j + c <= t) { dp[i + 1][j + c] = max(dp[i + 1][j + c], dp[i][j] + v); } } } int ans = 0; for (int j = 0; j < t + 1; j++) { ans = max(ans, dp[n][j]); } cout << ans << endl; }