import pypyjit pypyjit.set_param("max_unroll_recursion=-1") import sys sys.setrecursionlimit(10**4) N,X = list(map(int,input().split())) P = [-1] + list(map(lambda x:int(x)-1,input().split())) edge = [[] for _ in range(N)] for i in range(1,N): edge[i].append(P[i]) edge[P[i]].append(i) points = [(0,0)] for _ in range(1,N): c,s = list(map(int,input().split())) points.append((c,s)) INF = 1<<60 def dfs(n,pre): ret = [INF] * (X+1) ret[X] = 0 c,s = points[n] ret[max(0, X-s)] = 0 for i in edge[n]: if(i == pre):continue child = dfs(i, n) for j in range(X+1): if(ret[j] == INF):continue for k in range(X+1): ret[max(0,j-(X-k))] = min(ret[max(0,j-(X-k))], ret[j] + child[k] + points[i][0]) return ret print(dfs(0,-1)[0])