#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
const int oo = 1e9;
const int MOD = 1000000007;
const int BASE = 26;
const int N = 200010;
#define x first
#define y second
#define pb push_back
#define mp make_pair

int n , p[1001] , x[1001], sum[1001];
vector<int> g[1001];

pii dfs(int u) {
	sum[u] = 0;
	bitset<5002> bt;
	bt[0] = 1;
	for (int i = 0; i < g[u].size(); ++i) {
		int v = g[u][i];
		pii f = dfs(v);
		sum[u] += f.x + f.y;
		bt = ((bt << f.x) | (bt << f.y));
	}
	if (!g[u].size()) {
		sum[u] = x[u];
		return mp(x[u], 0);
	}
	int add = 0 , last = -1;
	for (int k = x[u]; k >= 0 ; --k) {
		if (bt[k]) {
			last = k;
			break;
		}
	}
	if (last == -1) {
		puts("IMPOSSIBLE");
		exit(0);
	}
	add = x[u] - last;
	sum[u] += add;
	return mp(x[u], sum[u] - x[u]);
}
int main() {
	scanf("%d", &n);
	for (int i = 2; i <= n; ++i) {
		scanf("%d", &p[i]);
		g[p[i]].pb(i);
	}
	for (int i = 1 ; i <= n ; ++i)
		scanf("%d", &x[i]);
	dfs(1);
	puts("POSSIBLE");
	return 0;
}
