#include<bits/stdc++.h>
using namespace std;
vector<int> v[50001], curr;
set<int> in[50001], ans;
pair<int, int> a[101];
bool visited[50001];
void dfs(int s, int b){
    if(s <= 0 || s > 50001)return;
    if(visited[s])return;
    visited[s] = true;
    in[b].insert(s);
    for(int i = 0; i < v[s].size(); i++){
        dfs(v[s][i], b);
    }
    visited[s] = false;
    return;
}
int main(){

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int n, m, k;
    cin >> n >> m >> k;
    for(int i = 1; i <= n; i++)ans.insert(i);
    for(int i = 0; i < m; i++){
        int p, q;
        cin >> p >> q;
        v[p].push_back(q);
    }
    for(int i = 0; i < k; i++){
        int p, q;
        cin >> p >> q;
        pair<int, int> pp = {p, q};
        a[i] = pp;
    }
    for(int i = 1; i <= n; i++){
        dfs(i, i);
    }
    /*for(int i = 1; i <= n; i++){
        cout << i << ": ";
        for(int j = 1; j <= n; j++){
            if(in[i].count(j)){
                cout << j << " ";
            }
        }
        cout << endl;
    }*/
    for(int i = 0; i < k; i++){
        for(int j = 1; j <= n; j++){
            if(!in[a[i].first].count(j))ans.erase(j);
        }
    }
    //cout << endl;
    //cout << endl;
    for(int i = 1; i <= n; i++){
        if(ans.count(i)){
            for(int j = 0; j < k; j++){
                if(!in[i].count(a[j].second)){
                    ans.erase(i);
                }
            }
        }
    }
    cout << ans.size() << endl;
    for(int i = 1; i <= n; i++){
        if(ans.count(i))cout << i << " ";
    }

    return 0;
}
