T=int(input()) N=int(input()) C=list(map(int,input().split())) V=list(map(int,input().split())) DP=[0]*(10**6) for i in range(T+1): DP[i]=max(DP[i-1],DP[i]) for j in range(N): c=C[j] v=V[j] DP[i+c]=max(DP[i+c],DP[i]+v) DP={0:0} for i in range(N): c=C[i] v=V[i] x=v s=v time=c L=[] while x!=0: for k in DP: if k+time<=T: L.append((k+time,DP[k]+s)) x//=2 s+=x time+=c for time,v in L: if time in DP: DP[time]=max(DP[time],v) else: DP[time]=v print(max(DP.values()))