#include<bits/stdc++.h>
#define N 1010
#define M 5050
using namespace std;
int rd[N],f[N];
int fa[N],v[N];
bool dp[N][M];
bool done[N];
vector<int> chs[N];
int n;
void dfs(int p){
	int tot=0,mi=0;
	done[p]=1;
	dp[p][0]=1;
	for(int i=chs[p].size()-1;i>=0;i--){
		int va1=f[chs[p][i]],va2=v[chs[p][i]];
		tot+=va1+va2;
		if(va1>va2) swap(va1,va2);
		mi+=va1;
		for(int j=v[p];j>=va2-va1;j--) dp[p][j]|=dp[p][j-va2+va1];
	}
	if(mi>v[p]){
		puts("IMPOSSIBLE");
		exit(0);
	}
	for(int i=v[p]-mi;i>=0;i--){
		if(dp[p][i]){
			f[p]=tot-i-mi;
			break;
		}
	}
	if(fa[p]){
		rd[fa[p]]--;
		if(!rd[fa[p]]) dfs(fa[p]);
	}
}
int main(){
	scanf("%d",&n);
	for(int i=2;i<=n;i++){
		scanf("%d",&fa[i]);
		chs[fa[i]].push_back(i);
		rd[fa[i]]++;
	}
	for(int i=1;i<=n;i++) scanf("%d",&v[i]);
	for(int i=1;i<=n;i++){
		if(!rd[i]&&!done[i]) dfs(i);
	}
	puts("POSSIBLE");
	return 0;
}