#include <bits/stdc++.h>
using namespace std;
void chmin(int& a, int b) { a = min(a, b); }
int N;
vector<int> child[1000];
int X[1000];
int dp[1000], sub[5001], sub2[5001];
const int INF = 1e8;
void dfs(int i) {
  for (int j = 0; j <= 5000; j++) sub[j] = INF;
  sub[0] = 0;
  for (int j : child[i]) {
    dfs(j);
    for (int j = 0; j <= 5000; j++) sub2[j] = INF;
    int s = X[j] + dp[j];
    for (int k = 0; k <= 5000; k++)
      for (int v : {X[j], dp[j]})
        if (k + v <= 5000) chmin(sub2[k + v], sub[k] + s - v);
    for (int j = 0; j <= 5000; j++) sub[j] = sub2[j];
  }
  dp[i] = INF;
  for (int j = 0; j <= X[i]; j++) chmin(dp[i], sub[j]);
  if (dp[i] == INF) {
    cout << "IMPOSSIBLE" << endl;
    exit(0);
  }
}
int main() {
  cin >> N;
  for (int i = 1; i < N; i++) {
    int p;
    cin >> p;
    child[p - 1].push_back(i);
  }
  for (int i = 0; i < N; i++) cin >> X[i];
  dfs(0);
  cout << "POSSIBLE" << endl;
}
