#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
char good[30], bad[30], str[N], str1[N];
int vis[1100];
int k1;
int main() {
  memset(vis, 0, sizeof(vis));
  scanf("%s", good);
  for (int i = 0; good[i]; i++) {
    vis[good[i]] = 1;
  }
  scanf("%s", str);
  int k1 = -1, len = strlen(str);
  for (int i = 0; str[i]; i++) {
    if (str[i] == '*') {
      k1 = i;
      break;
    }
  }
  int n;
  scanf("%d", &n);
  while (n--) {
    scanf("%s", str1);
    int l = strlen(str1);
    if (k1 == -1) {
      if (l != len)
        puts("NO");
      else {
        int flag = 0;
        for (int i = 0; i < len; i++) {
          if (str[i] == '?') {
            if (!vis[str1[i]]) {
              flag = 1;
              break;
            }
          } else {
            if (str[i] != str1[i]) {
              flag = 1;
              break;
            }
          }
        }
        if (flag)
          puts("NO");
        else
          puts("YES");
      }
    } else {
      int flag = 0;
      for (int i = 0; i <= k1 - 1; i++) {
        if (str[i] == '?') {
          if (!vis[str1[i]]) {
            flag = 1;
            break;
          }
        } else {
          if (str[i] != str1[i]) {
            flag = 1;
            break;
          }
        }
      }
      if (flag) {
        puts("NO");
        continue;
      }
      int h = len - k1 - 1;
      int h1 = k1, i, j;
      for (i = l - 1, j = len - 1; j > k1; i--, j--) {
        if (i < h1) {
          flag = 1;
          break;
        }
        if (str[j] == '?') {
          if (!vis[str1[i]]) {
            flag = 1;
            break;
          }
        } else {
          if (str[j] != str1[i]) {
            flag = 1;
            break;
          }
        }
      }
      if (flag) {
        puts("NO");
        continue;
      }
      for (int i1 = k1; i1 <= i; i1++) {
        if (vis[str1[i1]]) {
          flag = 1;
          break;
        }
      }
      if (flag)
        puts("NO");
      else
        puts("YES");
    }
  }
  return 0;
}
