#include <bits/stdc++.h>
using namespace std;
char regx[100007];
char str[100007];
bool isGood[26];
bool chk(char str[], char regx[], int &n, int &m, int &k) {
  int i, j;
  if (k == m) {
    if (n != m) return false;
    for (i = 0; i < n; i++) {
      if ((regx[i] == '?' && !isGood[str[i] - 'a']) ||
          (regx[i] != '?' && str[i] != regx[i]))
        return false;
    }
    return true;
  } else {
    for (i = 0; i < k && i < n; i++)
      if ((regx[i] == '?' && !isGood[str[i] - 'a']) ||
          (regx[i] != '?' && str[i] != regx[i]))
        return false;
    if (i < k) return false;
    int l = i;
    for (i = m - 1, j = n - 1; i > k && j >= 0; i--, j--)
      if ((regx[i] == '?' && !isGood[str[j] - 'a']) ||
          (regx[i] != '?' && str[j] != regx[i]))
        return false;
    if (i > k) return false;
    int r = j + 1;
    if (l > r) return false;
    for (i = l; i < r; i++)
      if (isGood[str[i] - 'a']) return false;
    return true;
  }
}
int main() {
  int i, j, k, l, m, n, x, y, z, a, b, r, q;
  scanf("%s", str);
  for (i = 0; str[i] != '\0'; i++) isGood[str[i] - 'a'] = true;
  scanf("%s", regx);
  m = strlen(regx);
  scanf("%d", &q);
  for (i = 0; i < m; i++)
    if (regx[i] == '*') break;
  k = i;
  while (q--) {
    scanf("%s", str);
    n = strlen(str);
    bool ans = chk(str, regx, n, m, k);
    if (ans)
      printf("YES\n");
    else
      printf("NO\n");
  }
  return 0;
}
