n, x = map(int, input().split()) P = [0] + list(map(int, input().split())) P = [P[i]-1 for i in range(n)] V = [[] for _ in range(n)] for i in range(1, n): V[P[i]].append(i) CS = [(0, 0)] + [tuple(map(int, input().split())) for _ in range(n-1)] from collections import deque dq = deque([0]) D = [-1] * n; D[0] = 0 DD = [[] for _ in range(n+1)] while dq: now = dq.popleft() DD[D[now]].append(now) for nxt in V[now]: D[nxt] = D[now] + 1 dq.append(nxt) dp = [[0] for _ in range(n)] inf = 1 << 50 def merge(A0, A1): a0 = len(A0)-1 a1 = len(A1)-1 ndp = [inf] * (a0 + a1 + 1) for now in range(a0+1): for nxt in range(a1+1): ndp[now+nxt] = min(ndp[now+nxt], A0[now]+A1[nxt]) return ndp for d in range(n, -1, -1): for now in DD[d]: for nxt in V[now]: dp[now] = merge(dp[now], dp[nxt])[:] c, s = CS[now] ndp = [inf] * (s + len(dp[now])) ndp[0] = 0 for i in range(len(dp[now])): ndp[i+s] = dp[now][i]+c dp[now] = ndp[:] ans = inf for i in range(x, len(dp[0])): ans = min(ans, dp[0][i]) print(ans)