{ int @n, @m; int a[201], b[]; ll c[], t[]; rd((a--, b--, c)(m), t(n)); rep(i, m) a[i+m] = b[i], b[i+m] = a[i], c[i+m] = c[i]; int MAX_C = 1003, A[MAX_C*m*2], B[], k=0; ll C[]; rep(i, m*2) rep(s, 1, MAX_C) { A[k] = a[i]*MAX_C+s; B[k] = b[i]*MAX_C+min(MAX_C-1, s+t[b[i]]); C[k++] = c[i]/s+t[b[i]]; } wgraph g; g.setDirectEdge(MAX_C*n, k, A, B, C); ll dist[MAX_C*n]; g.getDist(t[0], dist, ll_inf); ll ans = ll_inf; rep(s, MAX_C) ans