#SZSY1003. 勇者斗恶龙

勇者斗恶龙

题目描述

样例

一条恶龙有 nn 个头,初始生命值为 hh。勇士可以依次选择头进行攻击,每个头最多被攻击一次。

攻击第 ii 个头时,恶龙先损失 min⁡(当前生命值,atki)\min(\text{当前生命值},atk_i) 点生命值。如果生命值变为 00,恶龙立即被击败,不再恢复生命值;否则,它随后恢复 did_i 点生命值。

判断能否击败恶龙。若可以,还要求出最少的攻击次数。初始生命值已经为 00 时,不需要进行攻击。

输入格式

第一行包含两个整数 n,hn,h。

接下来 nn 行,第 ii 行包含两个整数 atki,diatk_i,d_i,分别表示攻击第 ii 个头造成的伤害上限和未被击败时恢复的生命值。

输出格式

如果能够击败恶龙,第一行输出 Yes,第二行输出最少的攻击次数。

否则,只输出一行 No。

数据范围

对于所有测试数据,1≤n≤3×1051 \le n \le 3 \times 10^5,0≤h≤1090 \le h \le 10^9,1≤atki,di≤1091 \le atk_i,d_i \le 10^9。

子任务

编号 分值 缩减范围 附加限制
1 20 n≤100n \le 100 —
2 30 n≤2000n \le 2000
3 10 — 对所有 ii,atki≤diatk_i \le d_i
4 存在 ii 使 atki≥hatk_i \ge h
5 30 —

样例 1

3 5
2 3
2 0
1 0
Yes
3

样例 1 说明

依次攻击第 2,3,12,3,1 个头:生命值先从 55 变为 33,再变为 22,最后一次攻击使生命值变为 00,此时不会恢复生命值。任意两次攻击能够造成的伤害总和都小于 55,所以至少需要三次。

样例 2

3 6
2 3
2 0
1 0
No