from collections import deque import heapq def main(): N, M = map(int, input().split()) graph = [[] for _ in range(N + 1)] for _ in range(M): u, v = map(int, input().split()) u -= 1 v -= 1 graph[u].append(v) graph[v].append(u) dists0 = [0] * N dists1 = [-10**18] * N K = int(input()) q0 = [] for _ in range(K): pos, dist = map(int, input().split()) pos -= 1 dist += 1 q0.append((-dist, pos)) dists0[pos] = dist while q0: dist, curr = heapq.heappop(q0) dist *= -1 if dists0[curr] < dist: continue for to in graph[curr]: new_dist = dists0[curr] - 1 if new_dist > dists0[to]: dists0[to] = new_dist if dists0[to] != 0: heapq.heappush(q0, (-new_dist, to)) q1= deque() if dists0[0] ==0: q1.append(0) dists1[0] = 0 while q1: curr = q1.popleft() for to in graph[curr]: if dists0[to] == 0 and dists1[to] == -10**18: dists1[to] = dists1[curr] + 1 q1.append(to) ans = dists1[-1] if ans == -10**18: print('No') else: print('Yes') print(ans) if __name__ == '__main__': main()