#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) {
        if (!st.empty()) {
          auto it = st.end();
          do {
            --it;
            if (*it + p.first <= X[x]) {
              st.insert(*it + p.first);
            }
          } while (it != st.begin());
        }
      }
    } else {
      if (!st.empty()) {
        auto it = st.end();
        do {
          --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);
        } while (it != st.begin());
      }
    }
  }
  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;
}
