cats 正在参加一场程序设计竞赛。这场程序设计竞赛共有 $n$ 个题,比赛时长为 $m$ 分钟。
比赛经验十分丰富的 cats 在比赛开始时就可以知道自己做每一个题需要的时间花费以及自己做每一个题提交不通过的次数。具体而言,对于第 $i$ 个题目,cats 需要 $t_i$ 分钟来完成它,并且通过前,cats 会有 $w_i$ 次不通过的提交。cats 在比赛开始时会将所有题目重新安排一个顺序,并按照自己的顺序从前到后依次做每一道题,直到题目全部做完或比赛剩余时间不够完成下一道题为止。cats 非常喜欢做题,如果 cats 没有做完所有的题,且剩余时间仍然足够完成安排顺序中的下一个题,cats 不会提前结束做题。
在程序设计竞赛中,除通过的题目数量外,还有一个很重要的评价标准:罚时。在题目通过数量相同的情况下,罚时越少,排名越靠前。罚时的具体计算方法为,每道题的罚时为比赛开始到通过该题所花费的时间(按分钟计)与最终通过该题前的提交总次数乘 $20$ 分钟之和。如某选手在比赛开始后 $121$ 分钟通过一道题,通过前有 $2$ 次不通过的提交,则该题的罚时为 $121 + 2 \times 20 = 161$ 分钟。每个通过的题目的罚时之和即为一个选手在这场比赛的总罚时。请注意,只有通过的题才会计入总罚时,未通过题目的提交不会计入罚时。
cats 在开始做题前想知道,如果他希望最终通过的题目数量为 $x$,那么他通过安排适当的做题顺序后,最小的罚时是多少。对于 $1$ 到 $n$ 之间的每一个正整数 $x$,你需要分别给出答案。如果无论如何安排做题顺序都无法让 cats 通过 $x$ 道题目,请输出 -1
。
输入的第一行为一个整数 $T(1\le T\le 100)$ ,表示测试点的总数 。
对于每个测试点:
第一行为两个整数 $n,m(1 \leq n \leq 100,1\leq m \leq 5000)$,表示比赛中题目的总数和比赛时长。
第二行为 $n$ 个整数 $t_1,t_2,\cdots t_n(1 \leq t_i \leq m)$,表示 cats 做第 $i$ 个题需要花费的时间(按分钟计)。
第三行为 $n$ 个整数 $w_1,w_2,\cdots w_n(0 \leq w_i \leq 10^5)$,表示 cats 做第 $i$ 个题提交不通过的次数。
保证所有测试点的 $n \cdot m$ 之和不超过 $5\times 10^5$ 。
对于每组测试点,输出一行结果,包括 $n$ 个整数,第 $i$ 个整数表示最终通过的题数为 $i$ 时 cats 的最小罚时(按分钟计)。如果无论如何安排做题顺序都无法通过 $i$ 道题,请输出 -1
。
3 3 233 1 3 2 2 1 3 4 12 2 4 6 5 2 1 0 1 4 100 80 90 9 10 5 2 1 0
\n · \n · · \n · · \n · \n · · · \n · · · \n · \n · · · \n · · · \n
-1 -1 130 -1 34 80 -1 130 48 247 -1
· · \n · · · \n · · · \n
对于第一组测试点,当通过题目数量为 $3$ 时,可以将题目按照第 $1,3,2$ 的顺序排序。
cats 在第 $1$ 分钟做完第一个题,在第 $1 + 2 = 3$ 分钟做完第三个题,在第 $1 + 2 + 3 = 6$ 分钟做完第二个题。此时所有题目已经做完,cats 停止做题。
第一个题产生的罚时为 $1 + 2 \times 20 = 41$ 分钟,第二个题产生的罚时为 $6 + 1 \times 20 = 26$ 分钟,第三个题产生的罚时为 $3 + 3 \times 20 = 63$ 分钟。总罚时为 $41 + 26 + 63 = 130$ 分钟。
对于第二组测试点,当通过题目数量为 $2$ 时,可以将题目按照第 $2,3,4,1$ 的顺序排序。
cats 在第 $4$ 分钟做完第二个题,在第 $4 + 6 = 10$ 分钟做完第三个题,此时比赛还剩下 $2$ 分钟,但 cats 需要 $5$ 分钟完成第四个题,时间不够做完这个题,cats 停止做题。
第一个题和第四个题由于没有做完,不会产生罚时。第二个题产生的罚时为 $4 + 1 \times 20 = 24$ 分钟,第三个题产生的罚时为 $10 + 0 \times 20 = 10$ 分钟。总罚时为 $24 + 10 = 34$ 分钟。