#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <string>
using namespace std;
int g[26];
int main() {
string good,s;
cin >> good >> s;
for (int i=0; i<good.length(); i++)
g[(int)(good[i]-'a')]=1;
//for (int i=0; i<26; i++)
// cout << (char)('a'+i) << ' ' << g[i] << endl;
int pos=s.find('*');
cout << pos << endl;
int n;
cin >> n;
int sl=s.length();
if (pos==-1)
for (int i=0; i<n; i++)
{
string q;
cin >> q;
int br=1;
if (q.length()!=sl) {cout << "NO"<< endl; continue;}
for (int i=0; i<s.length(); i++)
{
if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
else {br=0; break;}
}
if (br) cout << "YES"<< endl; else cout << "NO"<< endl; //here
}
else
for (int i=0; i<n; i++)
{
string q;
cin >> q;
int br=1;
if (q.length()<sl-1) {cout << "NO"<< endl; continue;}
for (int i=0; i<pos; i++)
if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
else {br=0; break;}
if (!br) {cout << "NO"<< endl; continue;} //here
for (int i=sl-1; i>pos; i++)
if (s[i]==q[i] || (s[i]=='?' && g[q[i]-'a']==1)) continue;
else {br=0; break;}
if (!br) {cout << "NO"<< endl; continue;}
for (int i=pos; i<q.length()-sl; i++)//crash after that
if (g[q[i]-'a']==1) {br=0; break;}
if (!br) cout << "YES" << endl; else cout << "NO"<< endl;
}
return 0;
}