'''
n个点,m边,无向 无环 无重边
第1行: n,m,k 总共停留k分钟
接下来n行:mi,v1i,v2i n个点:n个景点,第i个景点花费mi分钟,愉悦度分别增加v1i,v2i
接下来m行:xi,yi,ti 代表第i条边
初始愉悦度均为0
每游览完一个景点后,游游和小伙伴会 等概率随机选择一个可以从当前景点直达的 且来得及玩的景点作为下一个目的地
如果游览完一个景点后周围没有可以直达的且来得及游览的景点,游游和小伙伴就会提前结束游玩。
请分别计算出游游和小伙伴在游览结束后愉悦度的期望。
输入:
5 4 60
25 12 83
30 38 90
16 13 70
22 15 63
50 72 18
2 1 7
3 1 7
4 3 1
5 3 10
输出:
39.20000 114.40000
https://www.nowcoder.com/test/question/done?tid=32132700&qid=365969#summary
'''
n,m,k = list(map(int ,input().split(" ")))
class Node:
def __init__(self,id,time,v1,v2):
self.id = id
self.neibor = dict()
self.time = time
self.v1 = v1
self.v2 = v2
def addNeibor(self,id,time_z):
self.neibor[id] = time_z
nodeList = [0]
for i in range(n):
tmp = list(map(int ,input().split(" ")))
nodeList.append(Node(i+1, tmp[0],tmp[1],tmp[2]))
for i in range(m):
id1,id2,time = list(map(int, input().split(" ")))
nodeList[id1].addNeibor(id2, time)
nodeList[id2].addNeibor(id1, time)
def bfs(id,p):
happy1=0
happy2=0
que = [(nodeList[id],k-nodeList[id].time,nodeList[id].v1,nodeList[id].v2,p)]
while que:
cur,cur_t,cur_v1,cur_v2,tmp_prob = que.pop(0)
if cur.neibor:
lenth = 0
for id,t in cur.neibor.items():
if nodeList[id].time+t<= cur_t:
lenth+=1
if lenth>0:
tmp_prob *= 1 /lenth
for id, t in cur.neibor.items():
if nodeList[id].time + t <= cur_t:
que.append((nodeList[id], cur_t-nodeList[id].time-t, cur_v1+ nodeList[id].v1, cur_v2+ nodeList[id].v2,tmp_prob))
continue
happy1 += cur_v1*tmp_prob
happy2 += cur_v2*tmp_prob
return happy1,happy2
h1,h2 = 0,0
for i in range(1,n+1):
t1,t2 = bfs(i, 1/n)
h1+=t1
h2+=t2
print('%.5f %.5f'% (h1,h2))