/*
TASK: trees
LANG: C++
*/
// Iordan Boev SMG
# include <stdio.h>
# include <stdlib.h>
# define MAXN (1<<16)
# define MAXNN (1<<17)

int n,m,k,br;
int count[MAXN],father[MAXN],used[MAXN],list[MAXN];
int x,max;

void del(int p) {
    while(p != 0) {
        used[p] = 1;
        max--;
        p = father[p];
        count[p]--;   
    }   
}

void read() {
    int a;
    scanf("%d %d %d", &n,&m,&k);
    for(int i = 1; i <= n; i++) {
        scanf("%d",&a);
        father[i] = a;
        count[a]++;           
    }
    max = n;
    for(int i = 0; i < m; i++) {
        scanf("%d", &a);
        del(a);   
    }
    x = (int) (((double)(n*k))/100.0)+1;
    if( ((double)(x-1))/((double)n) >= ((double)k)/100.0) x--;
    //printf("%d %d\n", max,x);
    if(max < x) {
        printf("%d\n", max);
        exit(0);   
    }    
}   

int cmp(const void *e1,const void *e2) {
    return *(int*)e1 - *(int*)e2;   
}

void print() {
    qsort(list,br,sizeof(int),cmp);
    for(int i = 0; i < br-1; i++) printf("%d ", list[i]);
    printf("%d\n",list[br-1]);
    exit(0);   
}

void solve() {
    while(1) {
        for(int i = n; i > 0; i--) {
            if(used[i] == 0 && count[i] == 0) {
                list[br++] = i;
                used[i] = 1;
                count[father[i]]--;
                x--;   
            }
            if(x == 0) print();
                   
        }               
    }       
}

int main() {
    read();   
    solve();
    return 0;
}
