#include <bits/stdc++.h>
using namespace std;
const int N = 1010;
bool w[N][N * 5], s[2][N * 5];
int fa[N], a[N], v[N], sz[N];
inline int gi() {
  int x = 0, o = 1;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') ch = getchar(), o = -1;
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int main() {
  int n;
  cin >> n;
  for (int i = 2; i <= n; i++) fa[i] = gi();
  for (int i = 1; i <= n; i++) a[i] = gi(), w[i][0] = 1;
  for (int i = n; i; i--) {
    int l = sz[i], r = a[i], x = fa[i], t = a[i];
    while (~t && !w[i][t]) --t;
    if (t < 0) return puts("IMPOSSIBLE"), 0;
    l -= t;
    memset(s, 0, sizeof(s));
    for (int j = 0; j <= a[x]; j++) {
      if (w[x][j]) {
        if (j + l <= a[x]) s[0][j + l] = 1;
        if (j + r <= a[x]) s[1][j + r] = 1;
      }
      w[x][j] = (s[0][j] | s[1][j]);
    }
    sz[x] += a[i] + sz[i];
  }
  puts("POSSIBLE");
  return 0;
}
