#include<bits/stdc++.h>
using namespace std;
const int mod=1e9+7,N=1e5+5;
struct node{unsigned long long h1,h2;int len;char op;};
string s;int T,cnt,ht1[N],ht2[N];bool dp[15][N],sum[15][N];vector<node> a;unsigned long long pw[N]={1},pw2[N]={1};
inline void init()
{
a.push_back({0,0,0,' '});s+='0';
unsigned long long tmp=(s[0]=='?'||s[0]=='*'?0:s[0]),tmp2=tmp;int l=(s[0]!='?'&&s[0]!='*');char pre=(s[0]=='?'||s[0]=='*'?s[0]:' ');
for(int i=1;i<s.size();i++)
{
if(s[i]=='?'||s[i]=='*') {a.push_back({tmp,tmp2,l,pre});tmp=tmp2=l=0;pre=s[i];continue;}
(tmp=(tmp<<1)+s[i])%=mod;(tmp2=(tmp2<<1)+s[i])%=INT_MAX;l++;
}
if(tmp) a.push_back({tmp,tmp2,l,pre});
cnt=a.size()-1;
}
inline bool cmp(int i,int j){return a[i].h1==(ht1[j]-ht1[j-a[i].len]*pw[a[i].len]%mod+mod)%mod&&a[i].h2==(ht2[j]-ht2[j-a[i].len]*pw2[a[i].len]%INT_MAX+INT_MAX)%INT_MAX;}
int main()
{
ios::sync_with_stdio(false);
cin>>s>>T;
init();
while(T--)
{
memset(dp,false,sizeof(dp));memset(sum,false,sizeof(sum));
string t;cin>>t;int n=t.size()+1;t=" "+t+'0';
for(int i=1;i<=n;i++) (ht1[i]=(ht1[i-1]<<1)+t[i])%=mod,(ht2[i]=(ht2[i-1]<<1)+t[i])%=INT_MAX,(pw[i]=pw[i-1]<<1)%=mod,(pw2[i]=pw2[i-1]<<1)%=INT_MAX;
sum[0][0]=dp[0][0]=1;for(int i=1;i<=n;i++) sum[0][i]=sum[0][i-1]|dp[0][i];
for(int i=1;i<=cnt;i++)
{
for(int j=a[i].len;j<=n;j++)
{
if(cmp(i,j))
{
if(a[i].op==' ') dp[i][j]=dp[i-1][j-a[i].len];
else if(a[i].op=='?'&&j>a[i].len) dp[i][j]=dp[i-1][j-a[i].len-1];
else if(a[i].op=='*') dp[i][j]=sum[i-1][j-a[i].len];
}
}
sum[i][0]=dp[i][0];for(int j=1;j<=n;j++) sum[i][j]=sum[i][j-1]|dp[i][j];
}
cout<<(dp[cnt][n]?"YES\n":"NO\n");
}
return 0;
}
马蜂有亿点难看