#include<iostream>
#include<vector>
#include<queue>
#include<stdio.h>
#include<string.h>
using namespace std;

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

void FV1( int st )
    {
    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].first] == false && sns1[m][i].second == 1 ) q.push( sns1[m][i].first ) ;
        q.pop() ;
        }
    }

void FV2( int st )
    {
    memset( used , 0 , sizeof(used) ) ;
    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].first] == false && sns1[m][i].second == 2 ) q.push( sns1[m][i].first ) ;
        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 , 1 } ) ;
        sns1[v2].push_back( { v1 , 2 } ) ;
        }
    for ( int i = 1 ; i <= k ; i++ )
        cin >> x >> y ;
    }

void E( )
    {
    FV1( x ) ;
    FV2( y ) ;
    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 ;
}

