#include<cstdio>#include<map>#include<queue>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<list>#include<set>#include<cmath>using namespace std;const int maxn = 1e2 + 5;const int INF = 1e9;const double eps = 1e-7;typedef unsigned long long ULL;typedef long long LL;typedef pair<int, double> P;#define fi first#define se secondmap<string, int> M;vector<P> G[maxn];int pos[20];double V[20], A[20], T[maxn][20];int sink, q, n;double C;double dist[maxn];struct Node{ int pos; double dis; bool operator < (const Node& e) const{ return dis > e.dis; }};double get(int source, double ci, int from){ double v = A[source]*sqrt(ci) + V[source]; priority_queue<Node> q; while(!q.empty()) q.pop(); for(int i = 0;i < n;i++) dist[i] = 1e12; dist[from] = 0; q.push((Node){from, 0}); while(!q.empty()){ Node tem = q.top(); q.pop(); int pos = tem.pos; double dis = tem.dis; if(dis > dist[pos]) continue; if(pos == sink){ return dis; } for(int i = 0;i < G[pos].size();i++){ P& edge = G[pos][i]; int to = edge.fi; double der = edge.se; if(dist[to] > dis+der/v+T[to][source]){ dist[to] = dis+der/v+T[to][source]; q.push((Node){to, dist[to]}); } } }}bool can(double limit){ double left = C; for(int i = 0;i < q;i++){ double l = 0, r = 1e7, ans = 1e6; for(int c = 0;c < 100;c++){ double mid = (l+r)/2; if(limit-get(i, mid, pos[i])>eps){ ans = mid; r = mid; } else l = mid; } left -= ans; } if(left < eps) return false; return true;}int main(){ int m; while(scanf("%d%d%d", &n, &m, &q) != EOF){ M.clear(); for(int i = 0;i < n;i++) G[i].clear(); for(int i = 0;i < n;i++){ string s; cin >> s; M[s] = i; if(s == "Hakurei_Shrine") sink = i; } while(m--){ string s; cin >> s; int x = M[s]; cin >> s; int y = M[s]; double dis; cin >> dis; G[x].push_back(P(y, dis)); G[y].push_back(P(x, dis)); } for(int i = 0;i < q;i++){ string s; cin >> s >> s >> V[i] >> A[i]; pos[i] = M[s]; for(int j = 0;j < n;j++) cin >> T[j][i]; T[sink][i] = 0; } cin >> C; double l = 0, r = 1e12; double ans; for(int c = 0;c < 100;c++){ double mid = (l+r)/2; if(can(mid)){ r = mid; ans = mid; } else l = mid; } printf("%.7lfn", ans); } return 0;}