/*
TASK:trees
LANG:C++
*/
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>

std::vector<int> v[30000];
int n, k;
int parent[30000];
bool egg[30000];//pazim na koi kloni ima qica
int m;
int q;
bool cut[30000];//pazim koi kloni mogat da se odrevat
int br;//kolko klona ne mogat da se odrevat, ako n-br>q n.r.
int level[30000];
std::vector<int> good;//samo klonite, koito mogat da se revat
std::vector<int> good_sorted;

void read()
{
    std::cin>>n>>m>>k;
    for(int i=0;i<=n-1;i++)
    {
        int t;
        std::cin>>t;
        parent[i+1]=t;
        v[t].push_back(i+1);
    }
    for(int i=0;i<=m-1;i++)
    {
        int t;
        std::cin>>t;
        egg[t]=true;
    }
}

void get_percent()
{
    double t=((double)k*n)/100;
    if((int)t<t)
    {
        q=(int)t+1;
    }
    else
    {
        q=(int)t;
    }
}

void way(int l)
{
    int t=l;
    cut[t]=true;
    while(t!=0)
    {
        t=parent[t];
        if(!cut[t])
        {
            cut[t]=true;
            br++;
        }
    }
}

/*void all_children(int l)
{
    bool used[30000]={false};
    std::queue<int> q;
    q.push(l);
    used[l]=true;
    
    while(!q.empty())
    {
        int t=q.front();
        q.pop();
        cut[t]=true;
        
        for(int i=0;i<v[t].size();i++)
        {
            if(!used[v[t][i]])
            {
                q.push(v[t][i]);
                used[v[t][i]]=true;
            }
        }
    }
}*/

void bfs()
{
    bool used[30000]={true};
    std::queue<int> q;
    q.push(0);
    
    while(!q.empty())
    {
        int t=q.front();
        q.pop();
        if(egg[t])
        {
            way(t);
//            all_children(t);
        }
        
        for(int i=0;i<v[t].size();i++)
        {
            if(!used[v[t][i]])
            {
                q.push(v[t][i]);
                used[v[t][i]]=true;
                level[v[t][i]]=level[t]+1;
            }
        }
    }
}

void fill()
{
    for(int i=1;i<=n;i++)
        if(!cut[i])
            good.push_back(i);
}

bool compare(int t1, int t2)
{
    if(level[t1]==level[t2])
        return t1>t2;
    return level[t1]>level[t2];
}

int main()
{
    read();
    get_percent();
    bfs();
    cut[0]=false;//korena ne se reve
    fill();
    
    if(good.size()<q)
    {
        std::cout<<good.size()<<std::endl;
//        system("pause");
        return 0;
    }
    
    std::sort(good.begin(), good.end(), compare);
    for(int i=0;i<=q-1;i++)
    {
        int t=good[i];
        good_sorted.push_back(t);
    }
    std::sort(good_sorted.begin(), good_sorted.end());
    for(int i=0;i<good_sorted.size()-1;i++)
        std::cout<<good_sorted[i]<<' ';
    std::cout<<good_sorted[good_sorted.size()-1]<<std::endl;
    
/*    std::cout<<std::endl;
    std::cout<<"br="<<br<<std::endl;
    for(int i=0;i<=n;i++)
        std::cout<<cut[i]<<' ';
    std::cout<<std::endl;
    std::cout<<std::endl;
    for(int i=0;i<=n;i++)
        std::cout<<level[i]<<' ';
    std::cout<<std::endl;
    for(int i=0;i<good.size();i++)
        std::cout<<good[i]<<' ';
    std::cout<<std::endl;
    
    system("pause");*/
    return 0;
}
