#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;

int E[2][1010][26];
int last[2][1010];
int vis[1010][1010];
PII pre[1010][1010];

void output(int x, int y) {
	if (x == 1 && y == 1) return;
	output(pre[x][y].first, pre[x][y].second);
	printf("%c", vis[x][y] - 1 + 'a');
}

void gao()
{
	if (last[0][1] ^ last[1][1]) {
		puts("");
		return;
	}
	memset(vis, 0, sizeof(vis));
	queue<PII> Q;
	vis[1][1] = 10086;
	Q.push(PII(1, 1));
	while (!Q.empty()) {
		int x = Q.front().first;
		int y = Q.front().second;
		Q.pop();
		for (int i = 0; i < 26; i++) {
			int tx = E[0][x][i];
			int ty = E[1][y][i];
			if (tx == 0 && ty == 0) continue;
			if (vis[tx][ty]) continue;
			vis[tx][ty] = i + 1;
			pre[tx][ty] = PII(x, y);
			Q.push(PII(tx, ty));
			if (last[0][tx] ^ last[1][ty]) {
				output(tx, ty);
				puts("");
				return;
			}
		}
	}
	puts("0");
}

int main()
{
	int T;
	scanf("%d", &T);
	for (int cas = 1; cas <= T; cas++) {
		printf("Case #%d: ", cas);
		for (int i = 0; i < 2; i++) {
			int n, m, K;
			scanf("%d%d%d", &n, &m, &K);
			for (int j = 1; j <= n; j++) {
				for (int k = 0; k < 26; k++) {
					E[i][j][k] = 0;
				}
				last[i][j] = 0;
			}
			while (K--) {
				int x;
				scanf("%d", &x);
				x++;
				last[i][x] = 1;
			}
			while (m--) {
				int u, v;
				char buf[2];
				scanf("%d%d%s", &u, &v, buf);
				u++, v++;
				int w = *buf - 'a';
				E[i][u][w] = v;
			}
		}
		gao();
	}
	return 0;
}
