#include<stdio.h>
#include<algorithm>
#include<queue>
#include<string>
#include<map>
#include<iostream>
#include<functional>
using namespace std;
#define MAX 105
int weight;
int n;
struct character
{
char c;
int f;
};
struct huffmanCode
{
char c;
string str;
};
huffmanCode code[MAX];
character ch[MAX];
priority_queue<int,vector<int>,greater<int> >q;
map<char, int>ma;
void buildTree()
{
for (int i = 0; i < n; i++) {
q.push(ch[i].f);
}
while (q.size() >= 2) {
int x = q.top();q.pop();
int y = q.top();q.pop();
q.push(x + y);
weight += x + y;
}
q.pop();
}
bool cmp(const huffmanCode& a, const huffmanCode& b) {
return a.str.size() < b.str.size();
}
bool isPrefix()
{
sort(code, code + n, cmp);
for (int i = 0; i < n; i++) {
string str = code[i].str;
for (int j = i + 1; j < n; j++) {
if (code[j].str.substr(0, str.size()) == str)return true;
}
}
return false;
}
int main()
{
int m;
scanf("%d", &n);
for (int i = 0; i < n; i++) {
getchar();
scanf("%c %d", &ch[i].c, &ch[i].f);
ma[ch[i].c] = ch[i].f;
}
buildTree();
scanf("%d", &m);
while (m--){
int ans = 0;
for (int i = 0; i < n; i++) {
cin >> code[i].c >> code[i].str;
ans += ma[code[i].c] * code[i].str.size();
}
if (ans != weight)printf("No\n");
else if (isPrefix())printf("No\n");
else printf("Yes\n");
}
return 0;
}