#include <fstream>
#include <iostream>
using namespace std;

const int MAXL = 1000+ 5, MAXN = 26 + 5;
int n, l;
char c[MAXN];
int index[MAXL];
char s[MAXL];
char res[MAXL];
double exp_freq[MAXN];
double freq[MAXN];

void input() {
	ifstream fin("sifra.in");
	fin >> n;
	// ucitavamo ocekivane frekvencije
	for (int i = 0; i < n; i++) {
		fin >> c[i] >> exp_freq[i];
		freq[i] = 0;
		exp_freq[i] /= 100.;
	}
	fin >> l;
	// ucitavamo poruku i azuriramo frekvencije
	for (int i = 0; i < l; i++) {
		fin >> s[i];
		for (int j = 0; j < n; j++)
			if (s[i] == c[j]) {
				index[i] = j;
				freq[j] ++;
			}
	}
	for (int i = 0; i < n; i++)
		freq[i] /= n;
	fin.close();
}

int nzd(int a, int b) {
	if (a ==0) return b;
	if (a < b) 
		return nzd(b%a, a);
	else 
		return nzd(a%b, b); 
}

void resi() {
	double minqual = 1e15;
	int bestA, bestB;
	for (int b = 1; b < n; b++)
		if (nzd(b, n) == 1)
			for (int a = 0; a < n; a++) {
				double qual = 0;
				for (int i = 0; i < n; i++) {
					int m = (i * b + a) % n;
					qual += (freq[i] - exp_freq[m]) * (freq[i] - exp_freq[m]);
				}
				if (qual < minqual) {
					minqual = qual;
					bestA = a;
					bestB = b;
				}
			}
	for (int i = 0; i < l; i++)
		for (int j = 0; j < n; j++)
			if (c[j] == s[i]) {
				res[i] = c[(j*bestB+bestA)%n];
			}
	res[l] = 0;

}

void output() {
	ofstream fout("sifra.out");
	fout << res << endl;
	fout.close();
}

int main() {
	input();
	resi();
	output();
	return 0;
}