#include <bits/stdc++.h>
using namespace std;
using lli = long long int;
vector<lli> e[10005];
int n;
lli p[3000];
lli x[3000];
bool flag = true;
pair<lli, lli> dfs(int u, int par) {
  lli v = x[u];
  vector<pair<lli, lli>> h;
  for (auto s : e[u]) {
    if (s == par) continue;
    h.push_back(dfs(s, u));
  }
  lli mi = 0, ma = 0;
  for (auto& s : h) {
    if (s.first > s.second) swap(s.first, s.second);
    mi += s.first;
    ma += s.second;
  }
  if (mi > v) {
    flag = false;
    cout << "IMPOSSIBLE" << endl;
    exit(0);
  }
  sort(h.begin(), h.end(), [](pair<lli, lli> l, pair<lli, lli> r) -> bool {
    if (l.second != r.second) return l.second > r.second;
    return l.first < r.first;
  });
  for (auto s : h) {
    if (mi + s.second - s.first <= v) {
      mi += s.second - s.first;
      ma -= s.second - s.first;
    }
  }
  return make_pair(v, ma);
}
int main() {
  cin >> n;
  for (lli i = 0; i < (n - 1); i++) {
    cin >> p[i];
    p[i]--;
    e[i + 1].push_back(p[i]);
    e[p[i]].push_back(i + 1);
  }
  for (lli i = 0; i < (n); i++) {
    cin >> x[i];
  }
  dfs(0, -1);
  cout << "POSSIBLE" << endl;
}
