妈妈,世界是一个巨大的脑叶公司
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

《脑叶公司》是由月亮计划自研的一款管理游戏。前面忘了后面忘了,总之跟着晦涩难懂的新手教程管理一群大爷的同时,享受重开的乐趣。
(月亮计划修修你那bug吧)

现在主管在镇压一只血量为 m 的异想体,此时可以调配 n 个员工,在给出了每个员工的攻击力 a_i 和血量 b_i 的同时,也告诉了你异想体每一次发出攻击时的攻击力以及他做出的应对,一共 k 条。
为了方便理解,我们将操作以及状态简化为以下 4 种:

1:调配一个编号为 x 的员工加入战斗

2:调配一个编号为 x 的员工离开战斗

3:异想体对所有正在战斗状态的员工进行一次攻击力为 y 的伤害

4:治疗编号为 x 的员工 h 血量

若被扣除血量小于恢复血量,视为回复到满血。比如,对于一个血量现在为 70/100 的员工,主管治疗他 50 的血量,那么他的血量现在是 100 ,而不是 120

在这里,我们认为任何一个离开战场后又回到战场的员工血量是满的,同时,在一次指令或一次异想体攻击发出之后,每一个处于战斗状态的且存活的编号为 i 员工会对异想体造成攻击力为 a_i 的伤害。
 
现在他想问问你——AI安吉拉,若所有员工开始均处于战斗状态,试问能否让异想体的血量归零或者更低,如果能,那么有多少员工活下来了?(只要员工血量高于0就被认为存活)
注意:在任意一条指令执行前如果出现以下两种情况,请忽视接下来的一切指令并按照输出格式输出答案。
1.所有员工已经死亡
2.异想体已经被镇压。

输入描述:

第一行包含三个整数,nmk,分别代表员工数量,异想体血量,以及指令数量。 
接下来的一行,共有 n 个用空格分隔开来的正整数 a_i,代表对应编号为 i 员工的攻击力。
接下来的一行,共有 n 个用空格分隔开来的正整数 b_i,代表对应编号为 i 员工的血量。
接下来的 k 行,每一行包含主管的一个指令或者异想体的一次攻击。
每一行有两个或三个数字,表示一次指令。
1. 1\ x 代表第一种指令
2. 2\ x 代表第二种指令
3. 3\ y 代表第三种指令
4. 4\ x\ h 代表第四种指令。
数据保证:
1 \leq n \leq 10^51 \le h,b_i \leq 10^41 \leq y,a_i \leq 10^41 \leq k \leq 10^51 \leq m \leq 10^{15}

数据保证所有与员工有关的指令 x \leq n 不会重复调配已加入战斗\死亡的员工加入或调配已退出战斗\死亡的员工退出

输出描述:

输出包含一行或两行。

第一行为 YES 或 NO,表示在指令完后能否镇压。

注意,在异性被镇压之后,一切指令均无效,请立即停止你的程序并输出答案。

如果答案是 YES,再输出一行,为存活的员工数。
示例1

输入

复制
1 100 10
10
100
3 50
4 1 25
4 1 25
3 10
3 5
4 1 25
3 10
3 15
4 1 25
3 25

输出

复制
YES
1

说明

在样例 1 中,一号员工攻击力为 10,血量为 100

第一次,异想体对一号员工造成 50 的伤害 , 一号员工对异想体造成了 10 的伤害。

第二次第三次,主管分别治疗了一号员工 25 血量,一号员工分别对异想体造成了 10 的伤害。

以此类推,最后第 10 条指令结束时,员工的血量为 75 ,异想体血量正好归零,且 1 位员工存活。
示例2

输入

复制
1 100 1
10
100
3 200

输出

复制
NO

说明

在样例2中,异想体第一次攻击就将员工的血量降到-100了(也就是死亡),而异想体的血量没有降到零,所以没有成功.

若被扣除血量小于恢复血量,视为回复到满血。比如,对于一个血量现在为70/100的员工,主管治疗他50的血量,那么他的血量现在是100,而不是120
示例3

输入

复制
10 100 10
5 5 1 1 1 1 1 1 1 1
3 3 3 3 3 3 3 3 3 3
3 1
2 1
4 2 2
1 1
3 2
2 2
4 1 5
1 2
3 2
3 5

输出

复制
YES
2
示例4

输入

复制
2 1 1
1 1
1 1
2 1

输出

复制
YES
2

说明

存活两名员工。