5
27468 7465 74275 40573 40155
112071 76270 244461 264202 132397
1 777133331
2 107454154
3 652330694
4 792720519
 5
78188 56310 79021 70050 65217
115040 5149 128449 98357 36580
1 451393770
2 574046602
3 590130784
4 112514248
 7
1 1 1 1 1 1 1
1 3000000000 3000000000 3000000000 1000000000 1000000000 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
 10
2 8 6 1 2 7 6 9 2 8
4 9 4 3 5 2 9 3 7 3
1 8
2 8
3 8
4 10
5 1
6 4
7 3
8 10
9 2
 11
1 1 1 1 1 1 1 1 1 1 1
1 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
1 1000000000
 5
2 1 1 2 3
1 2 2 2 1
1 2
1 3
2 4
1 4

NO
 NO
 NO
 YES
 NO
 NO

import java.util.*;
import java.io.*;
public class cf846e {
static long[] a,b;
static ArrayList<pair>[] adj;
	public static void main(String[] args)throws IOException {
		BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
		PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
		StringTokenizer st=new StringTokenizer(bf.readLine());
		int n=Integer.parseInt(st.nextToken());
		b=new long[n];
		a=new long[n];
		st=new StringTokenizer(bf.readLine());
		for(int i=0;i<n;i++) {
			b[i]=Long.parseLong(st.nextToken());
		}
		st=new StringTokenizer(bf.readLine());
		for(int i=0;i<n;i++) {
			a[i]=Long.parseLong(st.nextToken());
		}
		int[] deg=new int[n];
		adj=new ArrayList[n];
		for(int i=0;i<n;i++) {
			adj[i]=new ArrayList<>();
		}
		for(int i=1;i<n;i++) {
			st=new StringTokenizer(bf.readLine());
			int x1=Integer.parseInt(st.nextToken())-1;
			long k1=Long.parseLong(st.nextToken());
			adj[x1].add(new pair(i,k1));
			deg[i]++;
		}
		double ans=dfs(0);
		if(ans>=0) {
			out.println("YES");
		}
		else {
			out.println("NO");
		}
		out.close();
	}
	static double dfs(int z) {
		double rem=b[z];
		for(pair p:adj[z]) {
			double q=dfs(p.x);
			if(q>=0) rem+=q;
			else rem+=p.k*q;
			if(rem<=Long.MIN_VALUE) return rem;
		}
		rem-=a[z];
		return rem;
	}
	static class pair{
		int x; long k;
		public pair(int a, long b) {
			x=a;k=b;
		}
	}
}
