/*
TASK:trees
LANG:C++
*/
#include <iostream>
using namespace std;
int n,m,k,a;
int pred[30001],sol[30001];
bool gn[30001];
int lvl[30001];
struct dae
{
       int num,level;
};
dae kamak[30001];
int end=0;
bool mandra(dae BA,dae BE)
{
     if(BA.level==BE.level) return BA.num>BE.num;
     return BA.level>BE.level;
}
int filLVL(int v)
{
    if(v==0) return 0;
    
    gn[pred[v]]=gn[v];
    
    if(lvl[v]!=0) return lvl[v];
    
   lvl[v]=lvl[pred[v]]+1;
   
   return lvl[v];
}  

int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++) cin>>pred[i];
    for(int i=1;i<=m;i++) {cin>>a;gn[a]=1;}
    double g=(double)k*(double)n/100.;
    if(g>k*n/100) k=k*n/100+1;
    else k=k*n/100;
    
    for(int i=1;i<=n;i++)
            if(lvl[i]==0) filLVL(i);
            
 //   for(int i=1;i<=n;i++) cout<<lvl[i]<<" ";
 //   cout<<endl;
  //  for(int i=1;i<=n;i++) cout<<gn[i]<<" ";
  //  cout<<endl;
  for(int i=1;i<=n;i++)
  {
          end++;
          kamak[end].num=i;
          kamak[end].level=lvl[i];
  }
  sort(kamak+1,kamak+n+1,mandra);
//  for(int i=1;i<=n;i++)
//          cout<<kamak[i].num<<" "<<kamak[i].level<<endl; 
          
  int ends=0;        
  for(int i=1;i<=n && ends<k;i++)
  {
          if(!gn[kamak[i].num])
                               sol[++ends]=kamak[i].num;
  }
  sort(sol+1,sol+ends+1);
  if(ends<k) cout<<ends;
  else
  {
      for(int i=1;i<=ends;i++)
      {
              cout<<sol[i];
              if(i<ends) cout<<" ";
      }
  }
  cout<<endl;
}
