#include<iostream>
#include<vector>
#include<queue>
using namespace std;

int n , m , k ;
vector<int> sns1[50001] ;
vector<int> sns2[50001] ;
int x[101] , y[101] ;
int v[50001] ;
bool used[50001] ;
bool used2[50001] ;

void FV1( int st , int en )
    {
    queue<int> q ;
    q.push( st ) ;
    while ( !q.empty() )
        {
        int m = q.front() ;
        v[m]++ ;
        used[m] = true ;
        for ( int i = 0 ; i < sns1[m].size( ) ; i++ )
            if ( used[sns1[m][i]] == false ) q.push( sns1[m][i] ) ;
        q.pop() ;
        }
    }

void FV2( int st , int en )
    {
    queue<int> q ;
    q.push( st ) ;
    while ( !q.empty() )
        {
        int m = q.front() ;
        v[m]++ ;
        used2[m] = true ;
        for ( int i = 0 ; i < sns2[m].size( ) ; i++ )
            if ( used2[sns2[m][i]] == false ) q.push( sns2[m][i] ) ;
        q.pop() ;
        }
    }

void S( )
    {
    cin >> n >> m >> k ;
    int v1 , v2 ;
    for ( int i = 1 ; i <= m ; i++ )
        {
        cin >> v1 >> v2 ;
        sns1[v1].push_back( v2 ) ;
        sns2[v2].push_back( v1 ) ;
        }
    for ( int i = 1 ; i <= k ; i++ )
        cin >> x[i] >> y[i] ;
    }

void E( )
    {
    FV1( x[1] , y[1] ) ;
    FV2( y[1] , x[1] ) ;
    int ans = 0 ;
    for ( int i = 1 ; i <= n ; i++ )
        if ( v[i] == 2 ) ans++ ;
    cout << ans << endl ;
    for ( int i = 1 ; i <= n ; i++ )
        {
        if ( v[i] == 2 ) { ans-- ; cout << i ; }
        if ( ans > 0 ) cout << " " ;
        }
    cout << endl ;
    }

int main()
{
    S( ) ;

    E( ) ;
    return 0 ;
}

