你是银狼
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

你是银狼,在半年多前的一次对决中,你在模拟宇宙和黑塔的对决失败了,76 个游戏账号全被注销。

至今你都有点不甘心,因此这次你作为骇客在骇入黑塔的模拟宇宙 lite 版,模拟宇宙 lite 版由一排房间组成,编号 i 范围 [0,n],你一开始在 0 号房间,你只能从 i 号房间走到 i+1 号房间。

你有生存值属性,初始生存值为 M,生存值不能小于 0

房间分为挑战房间、奖励房间和事件房间。在挑战房间,你可以选择挑战里面的怪物,挑战怪物会消耗生存值 a_i;在奖励房间,你可以获得 a_i 点生存值。领取奖励和挑战怪物视为通关这个房间。同时,存在事件房间,这些房间被黑塔设置了安全限制,因此你无法跳过这个房间,必须通关这个房间,必须消耗 a_i 生存值。

由于你是技术高超的骇客,你可以选择不挑战或不接受奖励而直接走到下一个房间(视为没有通关这个房间)。但是黑塔的安全系统也不是摆设,而且你的目的只是为了捣乱,你不想被发现,所以整个骇入过程你最多只能损失 S 点生存值。走出 n 号房间即完成骇入;虽然中途退出很逊,但是你不想再失去 76 个游戏账号,所以即使你没法走到 n 号房间你还是会直接退出,表示还是黑塔更胜一筹。

问最多通关几个房间?

输入描述:

第一行输入 n,M,S (1\le n \le 10^6,1\le M,S \le 10^{12})

第二行有 n 个数 a_1,a_2...a_n (0\le a_i \le 10^6) 表示每个房间需要消耗或奖励的生存值。

第三行有 n 个数 x_1,x_2...x_n 表示第 i 房间的种类(1\le x_i \le 3)x_i=1 表示这个房间为挑战房间;x_i=2 表示这个房间为奖励房间;x_i=3 表示这个房间为事件房间。

输出描述:

一个整数,表示最多通关房间数量。
示例1

输入

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

输出

复制
5

说明

对于样例,

房间 1 选择挑战,生存值 M=5,共消耗生存值 sum=1;

房间 2 选择奖励,生存值 M=6,共消耗生存值 sum=1;

房间 3 不挑战,生存值 M=6,共消耗生存值 sum=1;

房间 4 必须消耗,生存值 M=1,共消耗生存值 sum=6;

房间 5 选择挑战,生存值 M=0,共消耗生存值 sum=7;

房间 6 选择奖励,生存值 M=4,共消耗生存值 sum=7。