#include <bits/stdc++.h>
using namespace std;
int n;
int p[1010], a[1010], b[1010], f[1010][5010];
bool gao(int x) {
  b[x] = 5010;
  for (int i = 0; i <= a[x]; i++)
    if (f[x][i] < b[x]) b[x] = f[x][i];
  if (b[x] >= 5010) return 0;
  return 1;
}
void trans(int x) {
  int y = p[x];
  for (int i = a[y]; i >= 0; i--) {
    int temp = 5010;
    if (i >= a[x]) temp = min(temp, f[y][i - a[x]] + b[x]);
    if (i >= b[x]) temp = min(temp, f[y][i - b[x]] + a[x]);
    f[y][i] = temp;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) scanf("%d", p + i);
  for (int i = 1; i <= n; i++) scanf("%d", a + i);
  for (int i = n; i >= 1; i--) {
    if (!gao(i)) {
      puts("IMPOSSIBLE");
      return 0;
    }
    if (i > 1) trans(i);
  }
  puts("POSSIBLE");
  return 0;
}
