最大深度
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}Alan 所在城市的共有 n 家健身房,编号依次为 1n,近期正在举办探店挑战活动。从 1 号健身房主店开始,共有 n-1 组关系,这 n-1 组关系构成了一个挑战网络,选手只能从已完成挑战的健身房移动到与之直接相连的、尚未挑战的健身房。且规则保证从主店出发,能够到达任何一家健身房进行挑战。
\hspace{15pt}每间健身房有一个挑战目标 x_i,当且仅当你的举重能力大于等于 x_i 时,才能通过挑战。为了吸引选手来挑战,每间健身房提供增效饮料,只需花费 c_i 元,可永久提升举重能力 A 克,到达第 i 家健身房时,你可以选择是否购买该店的饮料(至多一次),购买后立即生效。
\hspace{15pt}Alan 初始举重能力为 k,他的预算为 b 元。Alan 想知道,在预算内,自己从主店出发,最多可以挑战到第几层(即路径的最大深度,定义为从主店到该节点的路径上的节点数量,主店深度为 1)。为了验证你的计算的准确性,Alan 一共会询问你 q 次。

输入描述:

\hspace{15pt}第一行输入三个整数 n,k,A\left(1 \leq n \leq 10^5;\,1 \leq k,A \leq 10^9 \right),表示节点数、初始能力、每瓶增效量。 
\hspace{15pt}第二行输入 n 个整数 x_1,x_2,\dots,x_n\left(1 \leq x_i \leq 10^9 \right),表示每个健身房的训练目标。
\hspace{15pt}第三行输入 n 个整数 c_1,c_2,\dots,c_n\left(1 \leq c_i \leq 10^9\right),表示每个健身房的饮料费用。
\hspace{15pt}此后 n-1 行,第 i 行输入两个整数 u_i,v_i\left(1 \leq u_i,v_i\leq n\right),表示第 i 条关系连接店铺 u_iv_i
\hspace{15pt}随后一行输入一个整数 q\left(1 \leq q \leq 10^5 \right),表示预算查询次数。
\hspace{15pt}随后一行输入 q 个整数 b_1,b_2,\dots,b_q\left(1 \leq b_j \leq 10^9 \right),表示每次询问的预算。

输出描述:

\hspace{15pt}输出 q 行,每行一个整数,表示在预算 b_j 内,Alan 最多可以连续挑战到第几层;若连主店都无法完成,则输出 0
示例1

输入

复制
5 10 20
10 30 30 40 20
5 2 8 3 6
1 2
1 3
2 4
2 5
3
5 1 10

输出

复制
3
1
3

说明

\hspace{15pt}当预算为 5 元时,其中一个最优的方案为路径 1 \to 2\to 4
\hspace{23pt}\bullet\,节点一,10 = k \geq x_1 =10,不购买,能力仍为 10
\hspace{23pt}\bullet\,节点二,10 = k < x_2 = 30,在当前店铺购买增效饮料,花费 2,此时能力变为 30,足够通过;
\hspace{23pt}\bullet\,节点四,30 = k < x_4 = 40,在当前店铺购买增效饮料,花费 3,此时能力变为 50,足够通过。
示例2

输入

复制
5 1 6
1 8 4 16 2
4 1 2 4 8
1 2
3 2
4 3
5 2
6
2 4 16 32 8 6

输出

复制
1
1
4
4
4
3