์ค์์ด๋ ์ต์ํ์ ๋น์ฉ์ผ๋ก ์น๊ตฌ๋ฅผ ์ฌ๊ท๊ณ ์ถ์ดํ๋ค. ์น๊ตฌ์ ์น๊ตฌ๋ ์น๊ตฌ๋ผ๋ ๊ฒ์ ๊ฒฐ๊ตญ 1, 2๊ฐ ์น๊ตฌ๊ณ 1, 3์ด ์น๊ตฌ๋ผ๋ฉด 2, 3 ์ญ์ ์น๊ตฌ๊ฐ ๋๋ค๋ ์๋ฆฌ๋ค. ๊ฒฐ๊ตญ ์น๊ตฌ ๊ด๊ณ๋ฅผ ํ๋์ ์งํฉ์ผ๋ก ๋ฌถ์ ์ ์๋ค. ๋ถ๋ฆฌ์งํฉ ๊ฐ๋ ์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค. ๋ณดํต ๋ถ๋ฆฌ์งํฉ์์๋ ์ซ์๊ฐ ์์ ๊ฐ์ ๋ํ๋ก ์ฌ์ฉํ์ง๋ง ์ฌ๊ธฐ์๋ ์ต์ ๋น์ฉ์ด ๋ชฉ์ ์ด๊ธฐ ๋๋ฌธ์ ์น๊ตฌ๋น๊ฐ ์ ์ ๊ฐ์ ๋ํ๋ก ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
๋ชจ๋ ์น๊ตฌ ๊ด๊ณ๋ฅผ ํ์ํ๋ฉฐ ๊ฐ์ ์ด๋ฃจ๋ ์งํฉ์ ๋ง๋ ํ์ ์ต์ข ์ ์ผ๋ก ๋ํํ๋ ๊ฐ๋ค์ด ๋ฌด์์ธ์ง๋ฅผ ์ฐพ๋๋ค. ์ด๋ ๋ํ ๊ฐ๋ค์ ์ ์ด์ ์ต์ ๋น์ฉ์ผ๋ก ์ค์ ํด๋์์ผ๋ฏ๋ก ์ด ๊ฐ๋ค์ ํด๋นํ๋ ์น๊ตฌ๋น๋ค์ ๋ํด๋๊ฐ๋ค. ๋ํ๋ ๋์ค์ ์ค์์ด๊ฐ ๊ฐ๊ณ ์๋ ๋ k๋ฅผ ๋์ด์ ๋ค๋ฉด ๋ชจ๋์ ์น๊ตฌ๋ฅผ ํ ์ ์๋ ๊ฒ์ด๋ฏ๋ก "Oh no"๋ฅผ ์ถ๋ ฅํ๋ค.
import sys
input = sys.stdin.readline
def find(x):
if rep[x] != x:
rep[x] = find(rep[x])
return rep[x]
def union(x, y):
x = find(x)
y = find(y)
if A[x] <= A[y]:
rep[y] = x
else:
rep[x] = y
N, M, K = map(int, input().split())
A = [0]+list(map(int, input().split()))
rep = [i for i in range(N+1)]
for _ in range(M):
v, w = map(int, input().split())
if find(v) == find(w):
continue
union(v, w)
rep_lst = list(set(find(i) for i in range(1, N+1)))
cost = 0
for x in rep_lst:
cost += A[x]
if cost > K:
print("Oh no")
exit()
print(cost)