# 参考: https://atcoder.jp/contests/abc220/submissions/26158680 import sys input = sys.stdin.readline def rerooting(edges): n = len(edges) # DFS parents = [-1] * n parents[0] = n todo = [0] order = [] while todo: u = todo.pop() for v in edges[u]: if parents[v] == -1: parents[v] = u todo.append(v) order.append(v) dp = [0] * n counts = [1] * n # Bottom Up for v in reversed(order): u = parents[v] dp[u] += dp[v] + counts[v] counts[u] += counts[v] # Top Down ans = [0] * n ans[0] = dp[0] for v in order: u = parents[v] ans[v] = ans[u] - 2*counts[v] + n return ans def solve(edges1,edges2,CC): E,W = len(edges1),len(edges2) esum_tmp = rerooting(edges1) esum = sum(esum_tmp)//2 wsum_tmp = rerooting(edges2) wsum = sum(wsum_tmp)//2 N = E+W ncomb = N*(N-1)//2 ans = [] for a,b in CC: res = esum + wsum + W*esum_tmp[a] + E*wsum_tmp[b] + E*W ans.append(res / ncomb) return " ".join(map(str,ans)) T = int(input()) ans = [""]*T for z in range(T): E,W,C = map(int,input().split()) G1 = [[] for _ in range(E)] J = list(map(lambda x:int(x)-1,input().split())) for i,j in enumerate(J): G1[i].append(j) G1[j].append(i) G2 = [[] for _ in range(W)] J = list(map(lambda x:int(x)-1,input().split())) for i,j in enumerate(J): G2[i].append(j) G2[j].append(i) CC = [tuple(map(lambda x:int(x)-1,input().split())) for _ in range(C)] ans[z] = (f"Case #{z+1}: {solve(G1,G2,CC)}") print("\n".join(ans))