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

#include <bits/stdc++.h>
using namespace std;
const long long int maxN = 1e5 + 326;
long long int pa[maxN], wei[maxN], has[maxN], need[maxN], N, isLeaf[maxN],
    stillneed[maxN];
vector<long long int> chi[maxN];
void dfs(long long int u = 0) {
  long long int take = 0;
  for (long long int v : chi[u]) {
    dfs(v);
    if (stillneed[v]) {
      has[u] -= stillneed[v] * wei[v];
      take += stillneed[v] * wei[v];
    }
  }
  has[u] -= take;
  if (has[u] >= need[u]) {
    stillneed[u] = 0;
    if (pa[u] != u) has[pa[u]] += has[u];
  } else {
    stillneed[u] = need[u] - has[u];
  }
}
signed main() {
  cin >> N;
  fill(isLeaf, isLeaf + N, true);
  for (long long int i = 0; i < N; i++) cin >> has[i];
  for (long long int i = 0; i < N; i++) cin >> need[i];
  for (long long int i = 1; i < N; i++) {
    cin >> pa[i] >> wei[i];
    pa[i]--;
    chi[pa[i]].push_back(i);
    isLeaf[pa[i]] = false;
  }
  dfs();
  if (has[0] >= need[0]) {
    cout << "YES\n";
  } else {
    cout << "NO\n";
  }
}
