#include <bits/stdc++.h>
using namespace std;
const int maxn=1010;
const int INF=1e9;
int n,sum[maxn],b[maxn];
vector<int> m[maxn];
bool dfs(int u) {
	vector<int> f (sum[u]+1,INF);
	f[0]=0;
	for (int ii=0;ii<m[u].size();ii++) {
		int v=m[u][ii];
		if (!dfs(v)) return 0;
		vector<int> g (sum[u]+1,INF);
		for (int i=0;i+sum[v]<=sum[u];i++)
			g[i+sum[v]]=min(g[i+sum[v]],f[i]+b[v]);
		for (int i=0;i+b[v]<=sum[u];i++)
			g[i+b[v]]=min(g[i+b[v]],f[i]+sum[v]);
		f=g;
	}
	b[u]=*min_element(f.begin(),f.end());
	return b[u]<INF;
}
int main() {
	scanf("%d",&n);
	for (int i=2;i<=n;i++) {
		int x; scanf("%d",&x);
		m[x].push_back(i);
	}
	for (int i=1;i<=n;i++)
		scanf("%d",&sum[i]);
	if (!dfs(1)) printf("IM");
	printf("POSSIBLE\n");
	return 0;
}