#P3947. 肝活动

    ID: 2894 Type: RemoteJudge 1000~2000ms 500MiB Tried: 0 Accepted: 0 Difficulty: 5 Uploaded By: Tags>搜索O2优化剪枝状态压缩

肝活动

题目背景

Yume 最近在玩一个名为《LoveLive! School idol festival》的音乐游戏。他之所以喜欢上这个游戏,是因为这个游戏对非洲人十分友好,即便你脸黑到抽不出好卡,还可以通过在每个月举办的两次活动中达成一定的目标来获得奖励。

题目描述

Yume 很喜欢这一期活动奖励卡的卡面,于是他决定要肝这一期的活动,拿到活动奖励。这一期的活动规则很特殊,玩家需要在活动规定的结束时间前,完成所有指定的歌曲(每首歌曲只能打一次),并获得一定的分数,就可以拿到活动奖励。如果在规定的时间前没有完成所有的歌曲,或者分数不够奖励的分数线,则不能领取活动奖励。每首歌有一个限定的奖励开放时间,玩家如果在这段时间内完成了这首歌,便可以获得一定的分数(获得的分数 = 开放时间 - 当前已用的总时间)。如果超出了这段时间之后再完成这首歌,就不能获得分数了。

这样的规则对 Yume 这样的老玩家来说本应是轻而易举,但不巧的是 Yume 把活动的结束时间记成了活动的开始时间,以至于当他上线跃跃欲试的时候,惊恐地发现活动已经快要结束了。现在他想知道,在剩余的时间之内,他能否完成所有的歌、达成奖励的分数线拿到活动卡。为了节省时间,他把这个问题交给了你来解决。请你根据给定的数据,帮他计算出能否在剩余的时间内达成目标。如果能,请告诉他完成每首歌曲的顺序。

输入格式

输入的第一行是三个整数 n,m,tn,m,t,分别表示规定完成的歌曲数目、获得奖励需要达到的最低分数和距离活动结束剩余的时间。

接下来有 nn 行,第 ii 行有一个字符串 SiS_i 和两个整数 TiT_iMiM_i,表示第 ii 首歌的歌名为 SiS_i,完成第 ii 首歌所需要的时间为 TiT_i,第 ii 首歌的奖励开放时间剩余 MiM_i。保证 TiMiT_i\le M_i。其中数据已按 SiS_i 的字典序给出。

输出格式

如果在活动结束前 Yume 可以完成指定的目标拿到奖励,则在第一行输出一个整数 CC,表示在获得奖励的前提下,所能够获得的分数的最大值;

接下来的 nn 行中,按照完成歌曲的顺序输出第 ii 首歌的歌名。如果有多种可能性,则输出字典序最小的情况。

如果在活动结束前 Yume 不能完成所有的歌曲,输出 No Answer

3 2 10
BokutachiwaHitotsunoHikari 3 8
Korekara 1 2
SnowHalation 2 5

6
SnowHalation
BokutachiwaHitotsunoHikari
Korekara

2 1 2
AoizoraJumpingHeart 1 2
TimeLapse 2 4
No Answer

提示

对于 0%0\% 的数据,与测试数据完全相同。

对于 20%20\% 的数据,满足 n5n \le 5

对于 40%40\% 的数据,满足 n9n \le 9

对于 70%70\% 的数据,满足 n15n \le 15

另有 10%10\% 的数据满足 i=1nTi<t\sum\limits^{n}_{i=1} T_i < t

对于 100%100\% 的数据,满足 n22n \le 22SiS_i 的长度不超过 5050。保证 m,t,Mi,Tim,t,M_i,T_i 及其相加的结果都在 int 最大范围内。