#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f,N=8e3+5;;
int n,p,m,money[N];
vector<int> g[N];
int num,dfn[N],low[N],st[N],top,inst[N],sum[N],belong[N],scc,in[N],ans;
void tarjan(int u){
dfn[u]=low[u]=++num;
st[++top]=u;
inst[u]=1;
for(int i=0;i<g[u].size();i++){
int v=g[u][i];
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(inst[v])low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
scc++;
int now;
do{
now=st[top--];
inst[now]=0;
sum[scc]=min(sum[scc],money[now]);
belong[now]=scc;
}while(now!=u);
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>p;
memset(money,inf,sizeof(money));
memset(sum,inf,sizeof(sum));
for(int i=1;i<=p;i++){
int a,b;
cin>>a>>b;
money[a]=b;
}
cin>>m;
for(int i=1;i<=m;i++){
int u,v;
cin>>u>>v;
g[u].push_back(v);
}
for(int i=1;i<=n;i++){
if(!dfn[i] && money[i]!=inf)tarjan(i);
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
cout<<"NO"<<endl<<i<<endl;
return 0;
}
}
cout<<"YES"<<endl;
for(int i=1;i<=n;i++){
for(int j=0;j<g[i].size();j++){
int v=g[i][j];
if(belong[i]!=belong[v]){
in[belong[v]]++;
}
}
}
for(int i=1;i<=scc;i++){
if(!in[belong[i]])ans+=sum[i];
}
cout<<ans<<endl;
return 0;
}