#include <bits/stdc++.h>
using namespace std;
int N, P, X[1000];
vector<int> vec[1000];
pair<int, int> dfs(int x) {
  int s = 0;
  set<int> st;
  st.insert(0);
  for (int i : vec[x]) {
    pair<int, int> p = dfs(i);
    if (p == make_pair(-1, -1)) return make_pair(-1, -1);
    s += p.first + p.second;
    if (p.second == 0) {
      if (p.first != 0) {
        for (auto it = --st.end(); it != --st.begin(); --it) {
          if (*it + p.first <= X[x]) {
            st.insert(*it + p.first);
          }
        }
      }
    } else {
      for (auto it = --st.end(); it != --st.begin(); --it) {
        if (*it + p.first <= X[x]) {
          st.insert(*it + p.first);
        }
        if (*it + p.second <= X[x]) {
          st.insert(*it + p.second);
        }
        it = st.erase(it);
      }
    }
  }
  if (st.empty()) {
    return make_pair(-1, -1);
  } else {
    auto it = st.end();
    --it;
    return make_pair(X[x], s - *it);
  }
}
int main() {
  cin >> N;
  for (int i = 1; i < N; ++i) {
    cin >> P;
    vec[P - 1].push_back(i);
  }
  for (int i = 0; i < N; ++i) {
    cin >> X[i];
  }
  cout << ((dfs(0) == make_pair(-1, -1)) ? "IMPOSSIBLE" : "POSSIBLE") << endl;
  return 0;
}
