from collections import deque import heapq import sys input = sys.stdin.readline N, M = map(int, input().split()) G = [[] for _ in range(N)] for _ in range(M): u, v = map(int, input().split()) 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)] hp = [] INF = 10**9 dist = [INF for _ in range(N)] JK.sort(key=lambda x:x[1]) for j, k in JK: j-=1 if dist[j] > k: dist[j] = k if k>0: hp.append((k, j)) heapq.heapify(hp) while hp: d, v = heapq.heappop(hp) for nv in G[v]: if dist[nv]>dist[v]-1: dist[nv] = dist[v]-1 if dist[nv]>0: heapq.heappush(hp, (dist[nv], nv)) dist2 = [INF for _ in range(N)] deq = deque() if dist[0]==INF: deq.append(0) dist2[0] = 0 while deq: v = deq.popleft() for nv in G[v]: if dist[nv]!=INF: continue if dist2[nv]>dist2[v]+1: dist2[nv] = dist2[v]+1 deq.append(nv) if dist2[N-1]==INF: print("No") else: print("Yes") print(dist2[N-1])