/*
TASK:trees
LANG:C++
*/
#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
#define MN 30003
int n,m,a[MN],g[MN];
double k;
vector <int> ans;
struct node
{
	int x,y,z;
}v[MN];
bool cmp(node x,node y)
{
	if(x.x=y.x)return x.z>y.z;
	else return x.x>y.x;
}
void vhod()
{
	int i;
	scanf("%d%d%lf",&n,&m,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		v[i].z=i;
	}
	for(i=1;i<=m;i++)
		scanf("%d",&g[i]);
}
void DFG(int i)
{
	if(v[i].y==1)
		return;
	v[i].y=1;
	DFG(a[i]);	
}
void DFS(int s,int f)
{
	if(v[s].x<f)
		v[s].x=f;
	else return;
	if(a[s]!=0)
		DFS(a[s],f+1);
}
void solve()
{
	int i,j=0;
	k=k/100;
	int p=ceil(n*k);
	for(i=1;i<=n;i++)
	{	 if(v[i].x==0)
		{  
            DFS(i,1);
        }
    }
	for(i=1;i<=m;i++)
		DFG(g[i]);
	sort(v+1,v+n,cmp);
	for(i=1;i<=n;i++)
	{
		if(!v[i].y)
		{
			ans.push_back(v[i].z);
			j++;
		}
		if(j>=p&&v[i].z<v[i+1].z)
		  break;
	}
		sort(ans.begin(),ans.end());
        int d=ans.size();
        if(p<=d)
		{
            for(i=d-p;i<ans.size()-1;i++)
                    printf("%d ",ans[i]);
		  printf("%d",ans[i]);
        }
        else
            printf("%d",d);
		printf("\n");
	
}
int main()
{
	vhod();
	solve();
	system("pause");
    return 0;
}
