#include <bits/stdc++.h>
using namespace std;
vector<int> v[5005];
int n, x[5005], dp[5005];
long long other[5005];
void dfs(int now) {
  if (v[now].empty()) {
    other[now] = 0;
    return;
  }
  for (int i = 0; i < v[now].size(); i++) dfs(v[now][i]);
  long long sum = 0;
  for (int i = 0; i < v[now].size(); i++) {
    int nxt = v[now][i];
    sum += x[nxt] + other[nxt];
    for (int j = x[now]; j >= 0; j--) {
      dp[j] = ((j - x[nxt] >= 0 ? dp[j - x[nxt]] : 0) |
               (j - other[nxt] >= 0 ? dp[j - other[nxt]] : 0));
    }
  }
  for (int i = x[now]; i >= 0; i--) {
    if (dp[i]) {
      if (sum - i >= 0) {
        other[now] = sum - i;
        return;
      }
    }
  }
  puts("IMPOSSIBLE");
  exit(0);
}
int main() {
  scanf("%d", &n);
  for (int p, i = 2; i <= n; i++) {
    scanf("%d", &p);
    v[p].push_back(i);
  }
  for (int i = 1; i <= n; i++) scanf("%d", &x[i]);
  dfs(1);
  puts("POSSIBLE");
}
