/*
TASK: trees
LANG: C++
*/
#include <cstdio>
#include <vector>
#include <cstdlib>
#include <algorithm>
#define maxN (1<<15)

using namespace std;

int n,m,k;
char dont[maxN];
int tree[maxN], egg[maxN], dist[maxN], br;
vector <int> list[maxN];
vector <int> ans;

void input()
{
     int i;
     scanf("%d%d%d",&n,&m,&k);
     double kk;
     kk = (double) k / 100.0;
     tree[0] = -1;
     for (i=1;i<=n;++i) scanf("%d",&tree[i]);
     for (i=0;i<m;++i) scanf("%d",&egg[i]);
     if (kk*n == (int)(kk*n)) br = kk*n;
     else br = (int)(kk*n) + 1;
     //printf("br=%d\n",br);
}

void mark()
{
     int i,p;
     for (i=0;i<m;++i) {
         p = egg[i];
         while (p != -1) {
               dont[p] = 1;
               p = tree[p];
               }
         }
     p = 0;
     for (i=1;i<=n;++i) if (dont[i]!=1) ++p;
     //printf("p=%d\n",p);
     if (p < br) {
        printf("%d\n",p);
        exit(0);
        }
}

int dfs(int p)
{
    if (dist[p] != 0) return dist[p];
    return dfs(tree[p]) + 1;
}

void solve()
{
     int i,j;
     dist[0] = 1;
     for (i=1;i<=n;++i) {
         dist[i] = dfs(i);
         if (!dont[i]) list[dist[i]].push_back(i);
         }
     for (i=1;i<=n+1;++i) sort(list[i].begin(), list[i].end());
     /*for (i=1;i<=n;++i) {
         for (j=0;j<list[i].size();++j) printf("%d ",list[i][j]);
         printf("\n");
         }*/
     //for (i=1;i<=n;++i) printf("%d ",dist[i]);
     for (i=n+1;i>=2;--i)
         for (j=list[i].size()-1; j>=0; --j)
             if (br > 0) {
                ans.push_back(list[i][j]);
                --br;
                }
     sort(ans.begin(), ans.end());
     for (i=0;i<ans.size()-1;++i) printf("%d ",ans[i]);
     printf("%d\n",ans[ans.size()-1]);
     return ;
}

int main()
{
    input();
    mark();
    solve();
    return 0;
}
