import heapq def dijkstra(n, edges, start): dist = [float('inf')] * n dist[start] = 0 pq = [(0, start)] while pq: d, u = heapq.heappop(pq) if d > dist[u]: continue for v, w in edges[u]: if dist[u] + w < dist[v]: dist[v] = dist[u] + w heapq.heappush(pq, (dist[v], v)) return dist def solve_case(w, e, c, w_edges, e_edges, overpasses): w_dist = [dijkstra(w, w_edges, i) for i in range(w)] e_dist = [dijkstra(e, e_edges, i) for i in range(e)] complete_dist = w_dist + e_dist n = w + e for a, b in overpasses: a -= 1 b += w - 1 for i in range(n): for j in range(n): complete_dist[i][j] = min(complete_dist[i][j], w_dist[i][a] + e_dist[b][j] + 1, w_dist[i][b] + e_dist[a][j] + 1) total_dist = sum(sum(dist) for dist in complete_dist) - n*(n-1) return [f"{total_dist/(n*(n-1)):.6f}" for i in range(c)] t = int(input()) for i in range(t): w, e, c = map(int, input().split()) w_edges = [list(map(int, input().split())) for j in range(w-1)] e_edges = [list(map(int, input().split())) for j in range(e-1)] overpasses = [tuple(map(int, input().split())) for j in range(c)] result = solve_case(w, e, c, w_edges, e_edges, overpasses) print(f"Case #{i+1}: {' '.join(result)}")