#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>

using namespace std;

#define MaxN 1005

vector < int > E [ MaxN ];
vector < int > B [ MaxN ];
int tre, cookie;
int bio [ MaxN ];
bool dis [ MaxN ];
int N, M, p, q, D;
queue < int > Q;
int fb, chk;

void dfs ( int x ){
   bio[x] = cookie;
   if ( B[x].size() == 0 )
      chk = 0;
   for ( int i = 0; i < B[x].size(); ++i )
      if ( fb != B[x][i] && bio[B[x][i]] != cookie )
         dfs(B[x][i]);
}

void spread ( int x ){
   dis[x] = true;
   
   for ( int i = 0; i < E[x].size(); ++i )
      if ( !dis[E[x][i]] ){
         dis[E[x][i]] = true;
         Q.push(E[x][i]);
         spread(E[x][i]);
      }
}
  
int main ( void ){
   scanf("%d %d",&N,&M);
   scanf("%d",&D);
   for ( int i = 0; i < M; ++i ){
      scanf("%d %d",&p,&q);
      --p; --q;
      E[p].push_back(q);
      B[q].push_back(p);
   }
   
   for ( int i = 0; i < D; ++i ){
      scanf("%d",&p);
      --p;
      dis[p] = true;
      Q.push(p);
   }
   
   while ( !Q.empty() ){
      tre = Q.front();
      dis[tre] = true;
      Q.pop();
      printf("%d ",tre+1);
            
      spread ( tre );
     
      for ( int i = 0; i < N; ++i )
         if ( !dis[i] ){
            ++cookie;
            chk = 1;
            fb = i;
            dfs(tre);
            if ( chk == 1 ){
               dis[fb] = true;
               Q.push(fb);
            }
               
         }
   
   
   }
   
   
   printf("\n");
   
   return 0;
}
