/*
TASK: trees
LANG: C++
*/
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
int n;int m;int per;int maxdist=-30004;vector <int> res;vector <int> gn;
struct cl
{ int p;int is;int dist;};
cl a[30004];
void erase(int c)
{ while(1)
  { if( c==0)break;
          int i;
    for(i=n;i>=1;i--)
     if(maxdist==a[i].dist&&a[i].is==0)
     { res.push_back(i); c--;if(c==0)break;}
     maxdist--;
     
  }
}   
      
int main()
{ cin>>n>>m>>per;
int i;
a[0].p=-1;
a[0].is=1;
a[0].dist=0;
for(i=1;i<=n;i++)
 { cin>>a[i].p;
   a[i].dist=a[a[i].p].dist+1;
   if(maxdist<a[i].dist)maxdist=a[i].dist;
   a[i].is=0;
 }
for(i=0;i<m;i++)
 { int g;
   cin>>g;
   a[g].is=1;
   gn.push_back(g);
  
 }
int br=int(ceil(double(double(n)*double(per)/double(100))));
int br1=gn.size();int used[30004];
for(i=0;i<gn.size();i++)
 {  int temp=gn[i];
     while(1)
     { if(temp==0)break;
       else
        { temp=a[temp].p;
          if(!used[temp]&&temp!=0){used[temp]=1;br1++;}
        }
     }
 }
//cout<<br1<<endl;
if(n-br1<br)           
 cout<<n-br1<<endl;
else
{ erase(br);
  sort(res.begin(),res.end());
  for(i=0;i<res.size();i++)
   if(i!=res.size()-1)
    cout<<res[i]<<' ';
   else cout<<res[i];
   cout<<"\n";
}
//system("pause");
}   
