from collections import deque N, M = (int(x) for x in input().split()) graph = [[] for _ in range(N)] for _ in range(M): u, v = (int(x) - 1 for x in input().split()) graph[u].append(v) graph[v].append(u) surv_list = [] for _ in range(int(input())): j, k = (int(x) for x in input().split()) j -= 1 surv_list.append((k, j)) under_surv = [False] * N surv_list.sort() q = deque() while surv_list: under_surv[surv_list[-1][1]] = True q.append(surv_list.pop()) while q: k, u = q.popleft() while surv_list and surv_list[-1][0] == k: if under_surv[surv_list[-1][1]]: surv_list.pop() continue under_surv[surv_list[-1][1]] = True q.appendleft(surv_list.pop()) if k == 0: break for v in graph[u]: if under_surv[v]: continue under_surv[v] = True q.append((k - 1, v)) if under_surv[0]: print("No") exit() dist = [-1] * N dist[0] = 0 q = deque([0]) while q: u = q.popleft() for v in graph[u]: if dist[v] != -1 or under_surv[v]: continue dist[v] = dist[u] + 1 q.append(v) if dist[-1] == -1: print("No") else: print("Yes") print(dist[-1])