from heapq import heappush, heappop from collections import deque INF = 1<<60 N, M = map(int, input().split()) G = [[] for _ in range(N)] for _ in range(M): u, v = map(int, input().split()) u, v = u-1, v-1 G[u].append(v) G[v].append(u) L = int(input()) JK = [list(map(int, input().split())) for _ in range(L)] base = 10**6 def encode(d, v): return d*base+v def decode(n): return n//base, n%base dist = [-INF]*N visited = [False]*N que = [] for J, K in JK: J -= 1 if dist[J] < K: dist[J] = K heappush(que, -encode(dist[J], J)) while que: _, n = decode(-heappop(que)) if visited[n]: continue visited[n] = True if dist[n] == 0: continue for v in G[n]: if dist[v] < dist[n]-1: dist[v] = dist[n]-1 heappush(que, -encode(dist[v], v)) if visited[0] or visited[-1]: exit(print("No")) que = deque() que.append(0) visited2 = [-1]*N visited2[0] = 0 while que: n = que.popleft() for v in G[n]: if visited[v]: continue if visited2[v] == -1: visited2[v] = visited2[n]+1 que.append(v) if visited2[-1] != -1: print("Yes") print(visited2[-1]) else: print("No")