小梦完成了很多游园活动里面的项目,拿到了很多的奖励分,现在她可以用这些奖励分去兑换中心兑换奖品了。
小梦拿着m 分准备去兑换奖品,兑换中心里有n 件奖品,每个奖品都有一个兑换分数和一定的价值,比如说书的兑换分数是3 分,对应的价值是5 元。
为了方便兑换,小朋友们把所有奖品的分数分成了3 类,第1 类奖品的兑换分数是1 分,第2类奖品的兑换分数是2 分,第3 类奖品的兑换分数是3 分。第i 个奖品的兑换分数是w_i(1\leq w_i\leq3) 分,对应的价值是v_i 元。
很明显,小梦希望用不超过m 分兑换奖品,并且要使得兑换到的奖品价值总和最大。现在,请你来帮助小梦计算这个问题吧。
输入的第一行是2 个正整数n 和m,表示奖品的总数和小梦的分数。
接下来一行有n 个正整数w_i,分别表示每个奖品的兑换分数。
接下来一行有n 个正整数v_i,分别表示每个奖品的价值。
输出可以兑换到的奖品的最大价值总和。
3 3 1 2 2 1 2 3
4
5 7 3 2 1 2 1 2 2 1 3 1
7
16 24 1 1 1 1 2 3 1 2 3 3 2 2 3 3 2 3 5 2 5 3 4 10 1 9 6 1 8 5 7 7 6 8
75
输入输出样例1 提示:
这里我们可以选择第1 件和第3 件商品,总的价值是4。
输入输出样例2 提示:
选择第1,3,4 和5 个商品,也可以选择第2,3,4 和5 个物品
对于所有的数据,保证1\leq n \leq10^5,1 \leq m \leq 3×10^5,1 \leq w_i \leq3,1 \leq v_i \leq 10^6。
数据点性质:
数据1~3: n \leq 20 无
数据4~5: n \leq 2000,m\leq6000 无
数据6: n = 50000,w_i 只有一种可能性
数据7: n = 80000 w_i 只有一种可能性
数据8: n = 100000 w_i 只有两种可能性
数据9~10:n \leq 100000 无