int main()
{
	int m,nn,l,i,T,a,b;
	double w;
	scanf("%d",&T);
	s = 0;
	while(T--){
		scanf("%d%d%d",&m,&nn,&l);
		t = m+nn+1;
		memset(con,0,sizeof(con));
		for(i = 1; i <= m; i++){
			scanf("%lf",&w);
			con[s][i] = log(w);
		}
		for(i = m+1; i <= m+nn; i++){
			scanf("%lf",&w);
			con[i][t] = log(w);
		}
		for(i = 0; i < l; i++){
			scanf("%d%d",&a,&b);
			con[a][b+m] = 1e10;
		}
		n = m+nn+2;
		printf("%.4lf\n",exp(Maxflow()));
	}
	return 0;
}
void AlphaBetaSwap(){
	INT32T alpha, beta;
	for (alpha = 0; alpha < numLabels; alpha++)
	for (beta = alpha + 1; beta < numLabels; beta++){
		ModifyMap(alpha, beta);
		Maxflow();
		ChangeLabel(alpha, beta);

	}
}
void TestMaxflow(){
	InitMap();
	N = 6;
	source = 0;
	sink = N - 1;
	AddEdge(source, 1, 100, 0);
	AddEdge(1, 2, 110, 0);
	AddEdge(2, sink, 20, 0);
	AddEdge(source, 3, 30, 0);
	AddEdge(3, 4, 200, 0);
	AddEdge(4, sink, 201, 0);
	AddEdge(2, 4, 11, 0);
	AddEdge(4, 2, 30, 0);
	Maxflow();
}