#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1005,M=5005,inf=1e8,lim=-1e7;
int n,i,lt[N],he[N],a[N];
int f[N],g[M];
int read(){
	char c=getchar();int k=0;for (;c<48||c>57;c=getchar());
	for (;c>47&&c<58;c=getchar()) k=(k<<3)+(k<<1)+c-48;return k;
}
void gmax(int &x,int k){if (k>x) x=k;}
void cal(int x){
	int i,m=a[x],sum=0;
	for (i=0;i<=m;i++) g[i]=0;
	for (int y=he[x];y;y=lt[y]){
		int v=a[y],vx=f[y],kx=v-vx;
		sum+=v;
		for (i=m;i>=0&&g[i]>lim;i--)
			g[i]=max(i>=v?g[i-v]+kx:-inf,i>=vx?g[i-vx]:-inf);
	}
	f[x]=sum-g[m];
}
int main(){
	for (n=read(),i=2;i<=n;i++){
		int x=read();lt[i]=he[x];he[x]=i;
	}
	for (i=1;i<=n;i++) a[i]=read();
	for (i=n;i;i--) cal(i);
	puts(f[1]<inf?"POSSIBLE":"IMPOSSIBLE");
}