/*
TASK:trees
LANG:C++
*/
#include <iostream>
#include <cmath>
#define MAXN 32768
using namespace std;
struct tree
{  int parent;
   bool bird;
   int level;
};
// Data
tree a[MAXN];
//
int N, M, K, cant, cut, ml;
int getlevel(int k)
{
    //cout << "getlevel(" << k << ");" << endl;
    if (k <= 0) return 0;
    else if (a[k].level > 0) return a[k].level;
    else
    {
        a[k].level = getlevel(a[k].parent) + 1;
        return a[k].level;
    }
}
void allbirds(int k)
{
    if (k == 0) return;
    //cout << "allbirds(" << k << ");" << endl;
    a[k].bird = true;
    allbirds(a[k].parent);
}
void ReadData()
{
   int i, d;
   cin >> N >> M >> K;
   a[0].bird = true;
   a[0].level = 0;
   a[0].parent = 0;
   for (i = 1; i <= N; i++)
   {
      cin >> d;
      a[i].parent = d;
      a[i].level = 0;
      a[i].bird = false;
   }
   for (i = 1; i <= M; i++)
   {
      cin >> d;
      allbirds(d);
   }
   for (i = 0; i <= N; i++)
   {
      if (a[i].bird) cant++;
   }
   // compute level
   for (i = 1; i <= N; i++)
   {
      a[i].level = getlevel(i);
      if (a[i].level > ml) ml = a[i].level;
   }
   cut = (int)ceil((K * N) / 100.0);
}
//void swap(struct int *x1, int *x2)
//{ int tmp = *x1; *x1 = *x2; *x2 = tmp; }
void bubbleSort(int m[], unsigned n)
{ unsigned i, j, k;
  for (i = n; i > 0; i = k)
    for (k = j = 0; j < i; j++)
      if (m[j] > m[j+1]) {
        swap(m[j], m[j+1]);
        k = j;
      }
}
int main()
{
   ReadData();
   if (cut > N + 1 - cant) cout << N + 1 - cant << endl;
   else
   {
      int reti = 0, i = 0;
      int ret[N];
      for (i = 0; i <= N - 1; i++)
      {
            ret[i] = 0;
      }
      /*
      for (i = 0; i <= N; i++)
      {
         cout << i << " = " << a[i].bird << endl;
      }
      cout << cant << " " << cut << endl;
      */
      
      while (reti < cut)
      {
            //cout << reti << " " << cut << " " << ml << endl;
            //cout << ml << endl;
            //if (ml < 0) exit (0);
            for (i = N; i >= 1; i--)
            {
                if (a[i].level == ml && !a[i].bird)
                {
                    // we have an answer
                    ret[reti++] = i;
                    a[i].bird = true;
                    if (reti == cut) goto end;
                }
            }
            ml--;
            //cout << reti << " " << cut << " " << ml << endl;
      }
      end:
      bubbleSort(ret, reti - 1);
      for (i = 0; i <= cut - 1; i++)
      {
            if (i == cut - 1) cout << ret[i];
            else cout << ret[i] << " ";
      }
      cout << endl;
   }
   //system("pause");
   return 0;
}
