#include <bits/stdc++.h>
using namespace std;
int gi() {
  int w = 0;
  bool q = 1;
  char c = getchar();
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') q = 0, c = getchar();
  while (c >= '0' && c <= '9') w = w * 10 + c - '0', c = getchar();
  return q ? w : -w;
}
int fa[1010], v[1010];
int f[1010][5010];
const int inf = 1 << 30;
int main() {
  int n = gi(), i, k, t, p, w;
  for (i = 2; i <= n; i++) fa[i] = gi();
  for (i = 1; i <= n; i++) v[i] = gi();
  for (k = n; k > 1; k--) {
    for (i = 0, t = inf; i <= v[k]; i++) t = min(t, f[k][i]);
    if (t > (1 << 20)) return puts("IMPOSSIBLE");
    for (i = v[p = fa[k]]; i >= 0; i--) {
      w = inf;
      if (i >= v[k]) w = min(w, f[p][i - v[k]] + t);
      if (i >= t) w = min(w, f[p][i - t] + v[k]);
      f[p][i] = w;
    }
  }
  puts("POSSIBLE");
  return 0;
}
