import heapq N,Q,K = map(int,input().split()) A = list(map(int,input().split())) end = max(A) bridge = [[] for n in range(N+1)] check = True tmp = [] for a in range(len(A)): tmp.append([A[a],a+1]) tmp.sort() heapq.heapify(tmp) for q in range(Q): a,b = map(int,input().split()) bridge[a].append(b) bridge[b].append(a) while end != tmp[0][0]: l = heapq.heappop(tmp) bridge[l[1]].sort() for b in bridge[l[1]]: if A[b-1] - l[0] > K: check = False break elif A[b-1] - l[0] != 0: A[l[1]-1] = A[b-1] heapq.heappush(tmp,[A[b-1],l[1]]) break print("Yes" if check else "No")