#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; int main() { int T; cin >> T; int N; cin >> N; int c; int C[N]; memset(C, 0, sizeof(C)); for (int i = 0; i < N; ++i) { cin >> C[i]; } int v; int V[N][100]; memset(V, 0, sizeof(V)); for (int i = 0; i < N; ++i) { cin >> v; int k = 0; while (v > 0) { V[i][k] = v; v /= 2; ++k; } } int dp[T + 1]; memset(dp, -1, sizeof(dp)); dp[0] = 0; int ans = 0; for (int i = 0; i < N; ++i) { for (int t = T - 1; t >= 0; --t) { if (dp[t] < 0) continue; int k = 0; int tv = 0; while (V[i][k] > 0) { tv += V[i][k]; int nt = t + C[i] * (k + 1); if (T < nt) break; int nv = dp[t] + tv; dp[nt] = max(dp[nt], nv); ans = max(ans, dp[nt]); ++k; } } } cout << ans << endl; return 0; }