#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<stack>
using namespace std;
const int N=1e3*3+5;
int n,p,op,mon,mey[N],r,A,B,h[N],cnt,dfn[N],low[N],dian,id[N],w[N],chu[N],ru[N],ans,mm[N],o=1e5;
stack<int> sta;
bool b[N];
struct qwe{
int to,net;
}tr[N*2];
void add(int x,int y){
tr[++cnt].to=y;
tr[cnt].net=h[x];
h[x]=cnt;
}
void df(int x){
dfn[x]=low[x]=++cnt;b[x]=1;sta.push(x);
for(int i=h[x];i;i=tr[i].net){
int y=tr[i].to;
if(!dfn[y]){
df(y);
low[x]=min(low[x],low[y]);
}
else if(b[y]) low[x]=min(low[x],dfn[y]);
}
if(dfn[x]==low[x]){
++dian;
id[x]=dian;
b[x]=0;
w[dian]=mey[x];mm[dian]=x;
while(sta.top()!=x){
w[dian]=min(w[dian],mey[sta.top()]);
mm[dian]=min(mm[dian],sta.top());
b[sta.top()]=0;
sta.pop();
}
sta.pop();
}
}
int main(){
scanf("%d",&n);
scanf("%d",&p);
memset(mey,127,sizeof(mey));
for(int i=1;i<=p;i++){
scanf("%d%d",&op,&mon);
mey[op]=mon;
}
scanf("%d",&r);
for(int i=1;i<=r;i++){
scanf("%d%d",&A,&B);
add(A,B);
}
cnt=0;
for(int i=1;i<=n;i++) if(!dfn[i]) df(i);
for(int i=1;i<=n;i++){
for(int j=h[i];j;j=tr[j].net){
int y=tr[j].to;
if(id[i]!=id[y]){
chu[id[i]]++;
ru[id[y]]++;
}
}
}
for(int i=1;i<=dian;i++){
if(!ru[i]) ans+=w[i];
if(ans>=2139062143&&o>mm[i]){
o=mm[i];
}
}
if(ans>=2139062143) puts("NO"),printf("%d\n",o);
else puts("YES"),printf("%d\n",ans);
return 0;
}