/*
TASK:trees
LANG:C++
*/

#include<cstdio>
#include<iostream>
#include<algorithm>
int M,N,K,zotr,maxcut,pmax;
int pred[30002];
int zlat[30002];
int path[30002];

void input() {
    scanf("%d%d%d",&N,&M,&K);
    for(int i=1;i<=N;i++) scanf("%d",&pred[i]);
    for(int i=0;i<M;i++) scanf("%d",&zlat[i]);
    double z=N*K/100.;
    if (z-int(z)!=0)zotr=int(z)+1;else zotr=int(z);
    maxcut=N;
}

void cut() {
    for(int i=0;i<M;i++) {
        int tek=zlat[i];
        while(tek!=0) {
            if(path[tek]!=0) {maxcut--;path[tek]=0;}
            tek=pred[tek];
        }
    }
}
void pyt() {
    char used[30002];
    int que[30502],be=0,en=0;
    for(int i=1;i<=N;i++) if(pred[i]==0) {que[en++]=i;path[i]=1;}
    while(be!=en) {
        for(int i=1;i<=N;i++) if(pred[i]==que[be]) {que[en]=i;path[que[en]]=path[que[be]]+1;
                                                    if(path[que[en]]>pmax) pmax=path[que[en]];en++;}
        be++;
    }
}   
        
void solve() {
    if(zotr>maxcut) printf("%d\n", maxcut);
    else{
        int tocut[30002],indtc=0;
        while(indtc<zotr) {
            for(int i=N;i>0;--i) 
                if(path[i]==pmax) tocut[indtc++]=i;
            pmax--;
        }
        std::sort(tocut,tocut+indtc);
        for(int i=indtc-zotr;i<indtc-1;i++) printf("%d ", tocut[i]); 
        if(K>0) printf("%d\n", tocut[indtc-1]); else printf("\n");
    }
}

int main() {
    input();
    pyt();
    cut();
    solve();
    return 0;
}
