#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 j=0;j<m[u].size();j++)
	{
		int v=m[u][j]; 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()
{
	cin>>n;	for(int i=2;i<=n;i++){int x; cin>>x; m[x].push_back(i);}
	for(int i=1;i<=n;i++)cin>>sum[i]; if(!dfs(1))cout<<"IM"; cout<<"POSSIBLE\n"; return 0;
}