请问这样为啥不行
#include<bits/stdc++.h>
#define size1 355
#define size2 125
#define rep(i, a, b) for(register int i = a; i <= b; i++)
using namespace std;
int n, m, card[size2], num[size1];
int dp[size1][5][size2];//到了i位置,上一次用的是j卡牌,已经用了k次
int cnt[5];
int main(){
scanf("%d%d",&n, &m);
rep(i, 1, n)scanf("%d",&num[i]);
rep(i, 1, m)scanf("%d",&card[i]), cnt[card[i]]++;
rep(i, 1, 4)
dp[1][i][0] = num[1];
rep(i, 1, n)
rep(j, 1, 4)
if(cnt[j])
rep(k, 1, cnt[j])
if(i - j > 0){
dp[i][j][k] = max(dp[i - j][j][k - 1] + num[i], dp[i][j][k]);
}
int ans = 0;
rep(i, 1, 4)
rep(j, 1, cnt[i])
ans = max(ans, dp[n][i][j]);
printf("%d",ans);
return 0;
}