#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, num, x[N], dp[N][5005], ans[N], flg;
vector<int> vec[N];
void dfs(int u) {
  for (register int i = 0; i < vec[u].size(); ++i) dfs(vec[u][i]);
  memset(dp[0], 0, sizeof(dp[0]));
  flg = 0;
  dp[0][0] = 0;
  for (register int i = 0; i < vec[u].size(); ++i) {
    int v = vec[u][i];
    flg = !flg;
    memset(dp[flg], 0, sizeof(dp[flg]));
    for (register int j = 0; j <= x[u]; ++j) {
      if (j >= x[v]) dp[flg][j] = min(dp[flg][j], dp[!flg][j - x[v]] + ans[v]);
      if (j >= ans[v])
        dp[flg][j] = min(dp[flg][j], dp[!flg][j - ans[v]] + x[v]);
    }
  }
  for (register int i = 0; i <= x[u]; ++i) ans[u] = min(ans[u], dp[flg][i]);
}
int main() {
  memset(ans, 0x3f, sizeof(ans));
  scanf("%d", &n);
  for (register int i = 2; i <= n; ++i)
    scanf("%d", &num), vec[num].push_back(i);
  for (register int i = 1; i <= n; ++i) scanf("%d", x + i);
  dfs(1);
  if (ans[1] < 0x3f3f3f3f)
    puts("POSSIBLE");
  else
    puts("IMPOSSIBLE");
  return 0;
}
