N,M=map(int,input().split()) #N是关卡数量,M是通道数量
L=[0]*20010
f=[0]*20010 #开空间,这个是最大得分数组,每一关的最大得分。
a=list(map(int,input().split())) #通道大小
b=list(map(int,input().split())) #分数表
for i in range(20010): #全部初始化,防止有些关是负分的
f[i]=int(-1e9)
f[0]=b[0] #由题意得f[0](在第一关最大得分)一定是b[0]
for i in range(N): #防止超出了最大关卡,所以超出的关卡就加0分
L[i]=b[i]
for i in range(N+10): #dp
for j in range(M):
if i-a[j]<0:
continue
else:
k=i-a[j]
f[i]=max(f[i],f[k]+L[i])
ans=int(-1e9) #设置ans=-1e9防止出现负数,以及最大得分不是最后一关等等
for i in range(N+10):
ans=int(max(ans,f[i]))
print(ans)
样例输入输出正常,80分,改了很多次范围……