#include <bits/stdc++.h>
using namespace std;
int n, f[10010], sum[10010], c[1010][1010], num[10010], SUM[10010], x[10010],
    dp[50010];
int Abs(int x) {
  if (x > 0) return x;
  return -x;
}
bool dfs(int root) {
  if (num[root] == 0) {
    SUM[root] = 0;
    return true;
  }
  int s;
  memset(dp, 0, sizeof(dp));
  for (int i = 1; i <= num[root]; i++)
    if (!dfs(c[root][i]))
      return false;
    else
      s += min(sum[c[root][i]], SUM[c[root][i]]);
  if (s > sum[root]) return false;
  for (int i = 1; i <= num[root]; i++)
    x[i] = Abs(sum[c[root][i]] - SUM[c[root][i]]);
  for (int i = 1; i <= num[root]; i++)
    for (int j = sum[root] - s; j >= x[i]; j--)
      dp[j] = max(dp[j], dp[j - x[i]] + x[i]);
  int tmp = s;
  s = 0;
  for (int i = 1; i <= num[root]; i++)
    s += max(sum[c[root][i]], SUM[c[root][i]]);
  SUM[root] = s - dp[sum[root] - tmp];
  return true;
}
int main() {
  cin >> n;
  for (int i = 2; i <= n; i++) cin >> f[i], c[f[i]][++num[f[i]]] = i;
  for (int i = 1; i <= n; i++) cin >> sum[i];
  if (dfs(1))
    cout << "POSSIBLE" << endl;
  else
    cout << "IMPOSSIBLE" << endl;
  return 0;
}
