from collections import deque N,M = list(map(int,input().split())) edge = [[] for _ in range(N)] for _ in range(M): u,v = list(map(int,input().split())) u -= 1;v -= 1 edge[u].append(v) edge[v].append(u) L = int(input()) q = deque() for _ in range(L): j,k = list(map(int,input().split())) j -= 1 q.append((j,k)) NG = set() while(q): now, HP = q.popleft() if(now in NG):continue NG.add(now) if(HP == 0):continue for i in edge[now]: q.append((i,HP-1)) q = deque([(0,0)]) INF = 10**18 dist = [INF for _ in range(N)] while(q): v,now = q.popleft() if(now in NG):continue if(dist[now] <= v):continue dist[now] = v for i in edge[now]: q.append((v+1,i)) if(dist[-1] == INF): print("No") else: print("Yes") print(dist[N-1])