#include <cstdio>
#include <Cstring>
#include <algorithm>
#define MAXN 1010
#define MAXM 5010
using namespace std;

int n;
int p[MAXN],a[MAXN],b[MAXN],f[MAXN][MAXM];

bool gao(int x){
	b[x]=MAXM;
	for(int i=0;i<=a[x];i++)
		if(f[x][i]<b[x]) b[x]=f[x][i];
	if(b[x]>=MAXM) return 0;
	return 1;
}

void trans(int x){
	int y=p[x];
	for(int i=a[y];i>=0;i--){
		int temp=MAXM;
		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;
}
