#include using namespace std; int main(void) { int T, N; cin >> T >> N; vector C(N), V(N); for(int i = 0; i < N; ++i) cin >> C[i]; for(int i = 0; i < N; ++i) cin >> V[i]; vector dp(T + 1, -1e9); dp[0] = 0; for(int i = 0; i < N; ++i) { vector ndp = dp; int nV = 0; for(int k = 1; k < 100; ++k) { if(V[i] == 0) break; nV += V[i]; V[i] /= 2; for(int j = 0; j <= T; ++j) if(dp[j] >= 0 and j + k * C[i] <= T) ndp[j + k * C[i]] = max(ndp[j + k * C[i]], dp[j] + nV); } swap(ndp, dp); } int ans = 0; for(int i = 0; i <= T; ++i) ans = max(ans, dp[i]); cout << ans << endl; return 0; }