Nova君来到神奇宝贝中心,准备从存储机中挑选若干个Pockmon去挑战最后的四天王和联盟冠军。Nova君现在有N只可挑选的Pockmon,对于第 i 只Pockmon,他的体总为 wi ,战斗力为 vi 。现在联盟规定,只能携带总重量为M的Pockmon进行挑战。那么,Nova君要怎么挑选才能使战斗力最强呢?大家肯定会说,这不是个简单的背包问题嘛?嗯,大概。但是现在有个问题,由于某些Pockmon在冒险的途中,和存储机内的其他Pockmon产生了羁绊,有可能对另一只Pokmon产生依赖,非得被依赖的那只被选中才能发挥战斗力,否则只能是个战斗力为0的卖萌生物而已,好在每只Pockmon都很专情,只会依赖一只(或者不依赖)。
PS:
(1) 依赖关系不对称,即,若A依赖B,B不一定依赖A,俗称beitai;
(2) 可能出现这样的情况:A依赖B,B依赖C,C依赖A,俗称love triangle,当然也有可能是多边形(悲伤脸)
(3) 保证不会出现自己依赖自己的情况
多组测试数据(组数不超过10),对于每组数据,输入4行,第一行是两个正整数N,M,表示Pockmon总数和联盟允许的最大重量,第二行包含N个正整数w1,w2...wn,表示第 i 个Pockmon的重量,第三行包含N个正整数v1,v2...vn,表示第 i 个Pockmon的战斗力,第四行包含N个正整数D1,D2...Dn,表示第 i 个Pockmon依赖的Pockmon的序号,如果没有依赖对象,则 Di=0。
PS:输入数据都在INT范围内,N不超过1000
对于每组数据,输出一行,表示战斗力的最大值
3 10
4 5 6
2 3 4
3 1 2
3 10
4 5 6
2 3 4
0 1 1
0
6