#include #include #include #include #include using namespace std; int main() { int t, n; cin >> t >> n; vector c(n, 0); // time vector v(n, 0); // satisfaction for (int i = 0; i < n; i++) { cin >> c[i]; } for (int i = 0; i < n; i++) { cin >> v[i]; } vector memo(t + 1, -1); memo[0] = 0; for (int i = 0; i < n; i++) { for (int j = t - 1; j >= 0; j--) { if (memo[j] != -1) { int point = v[i]; int add = 0; for (int k = 1; point > 0; k++, point /= 2) { int now = j + k * c[i]; if (now <= t) { add += point; if (memo[now] < memo[j] + add) { memo[now] = memo[j] + add; } else { break; } } } } } } int ans = 0; for (int i = t; i >= 0; i--) { ans = max(memo[i], ans); } cout << ans << endl; return 0; }