from heapq import heappop, heappush from collections import deque INF = 10**18 N, M = map(int, input().split()) graph = [[] for _ in range(N)] for _ in range(M): u, v = map(int, input().split()) u -= 1 v -= 1 graph[u].append(v) graph[v].append(u) L = int(input()) forbidden = [0] * N pq = [] for _ in range(L): j, k = map(int, input().split()) j -= 1 forbidden[j] = max(forbidden[j], k) heappush(pq, (-(k + 1), j)) while pq: k, j = heappop(pq) k = -k for i in graph[j]: if forbidden[i] < k - 1: heappush(pq, (-(k - 1), i)) forbidden[i] = k - 1 if forbidden[0] > 0 or forbidden[N - 1] > 0: print("No") exit() que = deque([0]) dist = [INF] * N dist[0] = 0 while que: v = que.popleft() for nv in graph[v]: if forbidden[nv] == 0 and dist[nv] >= INF: dist[nv] = dist[v] + 1 que.append(nv) if dist[N - 1] < INF: print("Yes") print(dist[N - 1]) else: print("No")