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

/*input
3
3 2 1
1 2 3
1 1
1 2
*/
#include <bits/stdc++.h>
#define Yeeee { cout << "NO"; exit(0); } 
#define int long long
using namespace std;
const int MX = 1e5  + 1;
const int oo = 2e18;
int a[MX];
vector<pair<int, pair<int, int> > > G[MX];
int multiply(int a, int b) {
	if(a > 0) return a / b;
	if(a != 0 and b >= oo / a) Yeeee;
	return a * b;
}
int dfs(int n, int p) {
	int GG = a[n];
	for(auto it: G[n]) {
		if(it.first == p) continue;
		int tmp = dfs(it.first, n);
		if((tmp < 0) ^ it.second.second)
			GG += multiply(tmp, it.second.first);
		else GG += tmp;
		if(GG < -oo) Yeeee;
	}
	return GG;
}
main () {
	int n, in; cin >> n;
	for(int i = 1; i <= n; i ++) cin >> a[i];
	for(int i = 1; i <= n; i ++) cin >> in, a[i] -= in;
	for(int i = 2; i <= n; i ++) {
		int a, k; cin >> a >> k;
		G[i].push_back({a, {k, 1}});
		G[a].push_back({i, {k, 0}});
	}
	cout << (dfs(1, -1) < 0 ? "NO" : "YES");
}