#include<cstdio>
#include<cstdlib>
#include<iostream>
#define oo 1147483647
using namespace std;
struct node
{
       int x,n;
}e[100000];
int k[3001];
int stack[10000];
int tot=0,sum=0,st,n,o,p;
int dfn[3001],low[3001];
int fen[3001][3001];
bool v[3001],sta[3001],tmp[3001];
int value[3001],d[3001];
bool map[3001][3001];
bool flag;
int ans;
int into[3001];
void pop(int u)
{
     int v=stack[sum];
     st++;
     int i=0;
     while (u!=v)
     {
          fen[st][++i]=v;
          sta[v]=false;
          v=stack[--sum];
     }
     fen[st][++i]=v;
     sta[u]=false;
     sum--;
     fen[st][0]=i;
}

void tarjan(int u)
{
     int t=k[u];
     dfn[u]=low[u]=++tot;
     stack[++sum]=u;
     sta[u]=true;
     v[u]=true;
     while (t)
     {
           if (!v[e[t].x])
           {
                          tarjan(e[t].x);
                          low[u]=min(low[u],low[e[t].x]);
           }
           else 
             if (sta[e[t].x]) low[u]=min(dfn[e[t].x],low[u]);
           t=e[t].n;
     }
     if (low[u]==dfn[u]) pop(u);
}
void add(int a,int b)
{
     e[++o].x=b;
     e[o].n=k[a];
     k[a]=o;
}
void init()
{
     int a,b;
     scanf("%d\n",&n);
     scanf("%d\n",&p);
     for (int i=1;i<=p;i++)
     {
         scanf("%d%d\n",&a,&b);
         value[a]=b;
     }
     int t;
     scanf("%d\n",&t);
     for (int i=1;i<=t;i++)
     {
         scanf("%d%d\n",&a,&b);
         add(a,b);
         d[b]++;
         map[a][b]=1;
     }
}
int main()
{
    freopen("tarjan.in","r",stdin);
    freopen("tarjan.out","w",stdout);
    init();
    for (int i=1;i<=n;i++)
      if (!v[i]) tarjan(i);
    int mi=n;
    for (int i=1;i<=st;i++)
    {
        into[i]=0;
        for (int j=1;j<=fen[i][0];j++)
        for (int k=1;k<=fen[i][0];k++)
          if (k!=j)
          {
                   if (map[fen[i][j]][fen[i][k]]) d[fen[i][k]]--;     
          }
        for (int j=1;j<=fen[i][0];j++)
          if (d[fen[i][j]]>0) into[i]=1;
    }
    int ans=oo,sum=0;
    for (int i=1;i<=st;i++)
    {
        if (!into[i])
        {
                     int ma=oo;
                     for (int j=1;j<=fen[i][0];j++)
                       if (value[fen[i][j]] && value[fen[i][j]]<ma) ma=value[fen[i][j]];
                     if (ma==oo)
                     {
                                for (int j=1;j<=fen[i][0];j++)
                                  if (fen[i][j]<ans) ans=fen[i][j];
                                flag=true;
                     }else sum+=ma;
        }
    }
    if (flag) {printf("NO\n%d\n",ans);}else printf("YES\n%d\n",sum);
    return 0;
}

tarjan求强连通分量