#include<bits/stdc++.h>
using namespace std;
const int N=4010,M=10010,inf=2e9;
int n,m,p,o[N],head[N],nxt[2*M],ver[2*M],tot;
int dfn[N],low[N],num;
int stk[N],ins[N],tp,c[N],val[N],scc;
int hc[N],nc[2*M],vc[2*M],tc,ind[N];
int ans=0;
void addedge(int x,int y) {
ver[++tot]=y;
nxt[tot]=head[x];
head[x]=tot;
}
void add_c(int x,int y) {
vc[++tc]=y;
nc[tc]=hc[x];
hc[x]=tc;
}
void tarjan(int u) {
dfn[u]=low[u]=++num;
stk[++tp]=u; ins[u]=1;
for(int i=head[u]; i; i=nxt[i]) {
int v=ver[i];
if(!dfn[v]) {
tarjan(v);
low[u]=min(low[u],low[v]);
} else if(ins[v]) {
low[u]=min(low[u],dfn[u]);
}
}
if(dfn[u]==low[u]) {
scc++; int z;
do {
z=stk[tp--]; ins[z]=0;
c[z]=scc; val[scc]=min(val[scc],o[z]);
} while(u!=z);
}
}
int main() {
scanf("%d%d",&n,&p);
for(int i=1; i<=n; i++) o[i]=inf;
for(int i=1,u,w; i<=p; i++) {
scanf("%d%d",&u,&w);
o[u]=w;
}
scanf("%d",&m);
for(int i=1,u,v; i<=m; i++) {
scanf("%d%d",&u,&v);
addedge(u,v);
}
for(int i=1; i<=n; i++) val[i]=inf;
for(int i=1; i<=n; i++) {
if(!dfn[i]&&o[i]!=inf) tarjan(i);
}
for(int i=1; i<=n; i++) {
if(!dfn[i]) {
printf("NO\n%d\n",i);
return 0;
}
}
for(int u=1; u<=n; u++) {
for(int i=head[u]; i; i=nxt[i]) {
int v=ver[i];
if(c[u]==c[v]) continue;
add_c(c[u],c[v]);
ind[c[v]]++;
e[c[v]].push_back(c[u]);
}
}
for(int i=1; i<=scc; i++)
if(ind[i]==0) ans=ans+val[i];
printf("YES\n%d\n",ans);
return 0;
}