#include typedef long long ll; typedef unsigned long long ull; #define FOR(i,a,b) for(int (i)=(a);i<(b);i++) #define REP(i,n) FOR(i,0,n) #define RANGE(vec) (vec).begin(),(vec).end() using namespace std; class AmusementParkAttraction { public: void solve(void) { int T,N; cin>>T>>N; vector C(N); REP(i,N) cin>>C[i]; vector V(N); REP(i,N) cin>>V[i]; vector> V2; REP(i,N) { int v = V[i]; while (v > 0) { V2.emplace_back(C[i],v); v /= 2; } } // V2.size() <= 15*log2(500) <= 135 // 後は通常どおり DP N = V2.size(); vector> dp(N+1, vector(T+1,0)); REP(i,N) REP(t,T+1) { int c,v; tie(c,v) = V2[i]; if (c <= t) dp[i+1][t-c] = max(dp[i+1][t-c], dp[i][t]+v); dp[i+1][t] = max(dp[i+1][t], dp[i][t]); } ll res = 0; REP(t,T+1) res = max(res,dp[N][t]); cout<solve(); delete obj; return 0; } #endif