/*
TASK: trees
LANG: C++
*/
#include <iostream>
#include <math.h>
#define MAXN 30010
using namespace std;
struct klon{int level,rez,n;};
int q[MAXN],p,n,m,tree[MAXN],gg[MAXN],i,j,rez[MAXN];
klon kloni[MAXN];
double k;

int rec(int l)
{
	if (kloni[l].level==-1) kloni[l].level=rec(tree[l])+1;
				else return kloni[l].level;
}
int cmp (klon a, klon b)
{
	if (a.rez!=b.rez) return a.rez<b.rez;
	if (a.level!=b.level) return a.level>b.level;
	return a.n>b.n;	
}
int main()
{cin>>n>>m>>k;
k=n*(double)(k/100.0);
p=(int)k+((k-(int)k)>0);
//cout<<k<<" "<<p<<"\n";
tree[0]=-1;
for(i=1;i<=n;i++) cin>>tree[i];
for(i=0;i<m;i++) cin>>gg[i];
for(i=1;i<=n;i++) {kloni[i].level=-1;
					kloni[i].n=i;
					kloni[i].rez=0;
				   }
kloni[0].level=0;
kloni[0].n=0;
kloni[0].rez=1;
for(i=0;i<=n;i++) if (kloni[i].level==-1) rec(i);
for (i=0;i<m;i++)
 {j=gg[i];
  while (tree[j]!=-1)
   {kloni[j].rez=1;
    j=tree[j];
   }	
 } 
sort(kloni,kloni+(n+1),cmp);
/*for(i=0;i<=n;i++) cout<<kloni[i].n<<" ";
cout<<endl;
for(i=0;i<=n;i++) cout<<kloni[i].level<<" ";
cout<<endl;
for(i=0;i<=n;i++) cout<<kloni[i].rez<<" ";
cout<<endl;*/
rez[0]=0;
for(i=0;i<p;i++) if (kloni[i].rez==0) rez[++rez[0]]=kloni[i].n;
/*cout<<rez[0]<<endl;*/
sort(rez+1,rez+(rez[0]+1));
if (p>rez[0]) cout<<rez[0]<<endl;
        else {cout<<rez[1];
			  for(i=2;i<=rez[0];i++) cout<<" "<<rez[i];
			  cout<<endl;
			}
//system("pause");
return 0;
}
