만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

프로그래밍 역량의 극대화

시간 제한8초메모리 제한512 MB

요약
선수 관계로 이어진 트리 형태의 기술들에 레벨 상한과 중요도가 주어지고, 수업료 k 이내에서 레벨과 중요도의 곱의 합을 최대화하는 값을 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 트리
정답자
아직 제출이 없습니다

문제

뛰어난 프로그래머가 되려면 셀 수 없이 많은 기술이 필요하다. 기술마다 중요도가 다르며, 프로그래밍 역량은 각 기술의 수준과 중요도를 곱한 값들의 합으로 측정한다.

이번 여름에 여름 프로그래밍 학교에 다닐 계획이다. 학교에는 이런 기술 여러 가지에 대한 강좌가 있다. 어떤 기술의 강좌를 들으면, 낸 수업료에 비례해 그 기술의 수준이 오른다. 수업료 1엔마다 수준이 1씩 오른다. 다만 기술마다 수준의 상한이 있어서, 그 이상 돈을 써도 수준은 더 오르지 않는다. 기술은 서로 독립적이지 않다. 가장 기초적인 강좌를 제외하면, 어떤 기술의 강좌를 들으려면 선수 기술이 일정 수준 이상이어야 한다.

주어진 수업료 예산 안에서 프로그래밍 역량을 가능한 한 가장 높게 만들고자 한다.

입력

입력은 최대 100개의 데이터셋으로 이루어지며, 각 데이터셋은 다음 형식으로 주어진다.

n k
h1 ... hn
s1 ... sn
p2 ... pn
l2 ... ln

첫째 줄에는 기술의 개수 nn (2≤n≤1002 \le n \le 100)과 예산 kk (1≤k≤1051 \le k \le 10^5)가 정수로 주어진다. 기술은 1번부터 nn번까지 번호가 매겨진다.

둘째 줄에는 nn개의 정수 h1…hnh_1 \dots h_n이 주어진다. hih_i는 기술 ii의 최대 수준이며, 1 이상 10510^5 이하이다.

셋째 줄에는 nn개의 정수 s1…sns_1 \dots s_n이 주어진다. sis_i는 기술 ii의 중요도이며, 1 이상 10910^9 이하이다.

넷째 줄에는 n−1n-1개의 정수 p2…pnp_2 \dots p_n이 주어진다. pip_i는 기술 ii의 선수 기술이며, 1 이상 i−1i-1 이하이다. 기술 1에는 선수 기술이 없다.

다섯째 줄에는 n−1n-1개의 정수 l2…lnl_2 \dots l_n이 주어진다. lil_i는 기술 ii를 배우기 위해 필요한 선수 기술 pip_i의 최소 수준이며, 1 이상 hpih_{p_i} 이하이다.

입력의 끝은 0 0이 한 줄에 적힌 것으로 나타낸다.

출력

각 데이터셋에 대해, 주어진 수업료 예산 안에서 달성할 수 있는 프로그래밍 역량의 최댓값을 한 줄에 정수 하나로 출력한다. 역량은 각 기술의 수준과 중요도를 곱한 값들의 합이다. 모든 기술의 수준은 0에서 시작한다. 예산을 전부 쓸 필요는 없다.

예제1

  1. 예제 1

    입력
    3 10
    5 4 3
    1 2 3
    1 2
    5 2
    5 40
    10 10 10 10 8
    1 2 3 4 5
    1 1 2 3
    10 10 10 10
    5 10
    2 2 2 5 2
    2 2 2 5 2
    1 1 2 2
    2 1 2 1
    0 0
    
    예상 출력
    18
    108
    35