#define _USE_MATH_DEFINES #include #include #include #include #include #include //#include #include #include #include #include #include #include ///////// #define REP(i, x, n) for(int i = x; i < n; i++) #define rep(i,n) REP(i,0,n) #define P(p) cout<<(p)< ///////// typedef long long LL; typedef long double LD; ///////// using namespace::std; ///////// int main(void){ std::cin.tie(0); std::ios::sync_with_stdio(false); std::cout << std::fixed;// cout << setprecision(16);// int TT,N; cin>>TT>>N; int c[15],v[15]; vector vec; vec.reserve(15); rep(i,N){cin>>c[i];} rep(i,N){cin>>v[i];} rep(i,N){ vec.push_back(PII(c[i],v[i])); } sort( vec.begin(), vec.end(), greater() ); int T[15]; int sumV[15]; int ans=0,tans; T[0] = TT; for(int i0=0; 0> i;} if( 1==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[1] = T[ 0]- i0*vec[ 0].first; for(int i1=0; 1> i;} if( 2==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[2] = T[ 1]- i1*vec[ 1].first; for(int i2=0; 2> i;} if( 3==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[3] = T[ 2]- i2*vec[ 2].first; for(int i3=0; 3> i;} if( 4==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[4] = T[ 3]- i3*vec[ 3].first; for(int i4=0; 4> i;} if( 5==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[5] = T[ 4]- i4*vec[ 4].first; for(int i5=0; 5> i;} if( 6==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[6] = T[ 5]- i5*vec[ 5].first; for(int i6=0; 6> i;} if( 7==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[7] = T[ 6]- i6*vec[ 6].first; for(int i7=0; 7> i;} if( 8==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[8] = T[ 7]- i7*vec[ 7].first; for(int i8=0; 8> i;} if( 9==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[9] = T[ 8]- i8*vec[ 8].first; for(int i9=0; 9> i;} if(10==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[10] = T[ 9]- i9*vec[ 9].first; for(int i10=0;10> i;} if(11==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[11] = T[10]-i10*vec[10].first; for(int i11=0;11> i;} if(12==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[12] = T[11]-i11*vec[11].first; for(int i12=0;12> i;} if(13==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[13] = T[12]-i12*vec[12].first; for(int i13=0;13> i;} if(14==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} T[14] = T[13]-i13*vec[13].first; for(int i14=0;14> i;} if(15==N){tans=0;rep(i,N){tans += sumV[i];}ans=max(ans,tans);} }}}}}}}}}}}}}}} P(ans); return 0; }