#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
#define int long long
#define pi pair<int,int>
#define mk make_pair
#define w first
#define v second
const int N = 2e5 + 5;
int n, m, k;
int vis[N], dis[N];
vector<int> g[N];
vector<int> ans;
priority_queue<pi,vector<pi>,greater<pi>> q;
signed main() {
cin >> n >> m >> k;
while (m--) {
int u, v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
memset(dis, -1, sizeof(dis));
while (k--) {
int u, w;
cin >> u >> w;
dis[u] = w;
q.push(mk(w, u));
}
while (!q.empty()) {
int v = q.top().v;
q.pop();
for (int i : g[v])
if (dis[i] < dis[v] - 1) {
dis[i] = dis[v] - 1;
q.push(mk(dis[i], i));
}
}
for (int i = 1; i <= n; ++i)
if (dis[i] >= 0) ans.push_back(i);
cout << ans.size() << '\n';
for (int i : ans) cout << i << ' ';
return 0;
}
TLE 10