76分
#include<bits/stdc++.h>
using namespace std;
#define M 200010
#define int long long
#define For(i,j,k) for(int i=j;i<=k;i++)
#define Res(i,j,k) for(int i=j;i>=k;i--)
#define endl '\n'
#define IOS ios::sync_with_stdio(0)
#define pb(i) push_back(i)
#define pf(i) push_front(i)
#define mem(a,b) memset(a,b,sizeof a)
int n, m, r;
pair<int, int> sm[M];
int cnt, hd[M];
struct Edge {
int to, nxt;
} e[M * 2];
int nt, root, tmp, top, idx;
int dfn[M], low[M], bel[M],deg[M];
bool vis[M];
int cut[M], st[M], siz[M];
void add (int u, int v) {
e[++cnt].to = v;
e[cnt].nxt = hd[u];
hd[u] = cnt;
}
int x[M], y[M];
void tarjan (int u) {
dfn[u] = low[u] = ++tmp;
st[++top] = u;
for (int i = hd[u]; i; i = e[i].nxt) {
int v = e[i].to;
if (!dfn[v]) {
tarjan (v);
low[u] = min (low[u], low[v]);
} else if (!bel[v]) low[u] = min (low[u], dfn[v]);
}
if (dfn[u] == low[u]) {
siz[++idx] = 1;
bel[u] = idx;
while (st[top] != u) {
bel[st[top]] = idx;
siz[idx]++;
top--;
}
top--;
}
}
int num;
void dfs(int u) {
num ++;
vis[u] = 1;
for (int i = hd[u]; i; i = e[i].nxt) {
int v = e[i].to;
if (!vis[v]) dfs(v);
}
}
bool cmp(pair<int, int> a, pair<int, int> b) {
return deg[bel[a.first]] > deg[bel[b.first]];
}
signed main() {
scanf("%lld%lld", &n, &r);
For(i, 1, r) {
scanf("%lld%lld", &sm[i].first, &sm[i].second);
}
scanf("%lld", &m);
For(i, 1, m) {
int u, v;
scanf("%lld%lld", &u, &v);
x[i] = u, y[i] = v;
add(u, v);
}
For(i, 1, n) {
if (!dfn[i]) {
tarjan(i);
}
}
cnt = 0;
mem(hd, 0);
mem(e, 0);
For(i, 1, m) {
if (bel[x[i]] != bel[y[i]]) {
add (bel[x[i]], bel[y[i]]);
deg[bel[x[i]]] ++;
}
}
sort(sm + 1, sm + 1 + r, cmp);
int ans = 0;
For(i, 1, r) {
int u = sm[i].first;
if(!vis[bel[u]]){
ans += sm[i].second;
dfs(bel[u]);
}
if (num == idx) {
printf("YES\n");
printf("%lld", ans);
return 0;
}
}
printf("NO\n");
ans = n + 1;
For(i, 1, idx) {
if (!vis[i]) {
For(j,1,n){
if(bel[j] == i){
ans = min(ans,j);
}
}
}
}
cout << ans;
return 0;
}