#include<bits/stdc++.h>
using namespace std;
bool ans[50005];
vector<int> edges[50005];
bool used[50005];
bool used2[50005];
void clear_(){
    for(int i=0;i<50005;i++) used[i]=false;
}
void clear_2(){
    for(int i=0;i<50005;i++) used2[i]=false;
}
void bfs(int s){
    queue<int> q;
    q.push(s);
    used[s]=true;
    while(!q.empty()){
        int u=q.front();
        q.pop();
        for(auto v: edges[u]){
            if(!used[v]){
                used[v]=true;
                q.push(v);
            }
        }
    }
}
void bfs2(int s, int f){
    queue<int> q;
    q.push(s);
    used2[s]=true;
    while(!q.empty()){
        int u=q.front();
        q.pop();
        for(auto v: edges[u]){
            if(!used2[v]){
                used2[v]=true;
                q.push(v);
            }
        }
        if(used2[f]) return;
    }
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n, m, k;
    cin>>n>>m>>k;
    for(int i=0;i<m;i++){
        int a, b;
        cin>>a>>b;
        edges[a].push_back(b);
    }
    for(int i=0;i<=n;i++) ans[i]=true;
    for(int i=0;i<k;i++){
        int x, y;
        cin>>x>>y;
        bfs(x);
        for(int j=0;j<=n;j++){
            if(!used[j]) ans[j]=false;
            else{
                bfs2(j, y);
                if(!used2[y]) ans[j]=false;
                clear_2();
            }
        }
        clear_();
    }
    int br=0;
    for(int i=0;i<=n;i++) if(ans[i]) br++;
    cout<<br<<endl;
    for(int i=0;i<=n;i++) if(ans[i]) cout<<i<<" ";
    return 0;
}
