#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;

typedef pair<int,int> P;

vector<string> boad;
int n,H,W,h,w,t[10],num[10];
int r,k;
bool use[10];

void rotate(vector<string> &x,int h,int w){
  string res[20];

  for(int i=0;i<w;i++){
    string hoge;
    for(int j=0;j<h;j++)hoge += x[h-1-j][i];
    res[i] = hoge;
  }
  x.clear();
  for(int i=0;i<w;i++)x.push_back(res[i]);
}

class piece{
public:
  vector<string> g[4];
  int h[4],w[4];
  int s;
  vector<P> pos[4];
  piece(void){}
  piece(vector<string> a,int b,int c,int d){
    h[0] = b;
    w[0] = c;
    int j=0;
    while(1){
      for(int i=0;i<h[j];i++)g[j].push_back(a[i]);
      if(++j>3)break;
      rotate(a,h[j-1],w[j-1]);
      h[j] = w[j-1];
      w[j] = h[j-1];
    }
    s = d;
    for(int i=0;i<4;i++)pos[i].clear();
  }
};

piece p[10];

bool backtrack(int a){
  /*
  cout << t[a] << endl;
  for(int i=0;i<H;i++)cout << boad[i] << endl;
  cout << endl;
  */
  if(a==k){
    for(int i=0;i<H;i++)
      for(int j=0;j<W;j++)
	if(boad[i][j]=='.')return false;
    return true;
  }

  string tmp[20];
  for(int i=0;i<H;i++)tmp[i] = boad[i];

  for(int z=0;z<4;z++){
    for(int i=0;i<(int)p[t[a]].pos[z].size();i++){
      int x = p[t[a]].pos[z][i].second;
      int y = p[t[a]].pos[z][i].first;
      bool f = true;
      for(int l=0;l<p[t[a]].h[z];l++){
	for(int m=0;m<p[t[a]].w[z];m++){
	  if(boad[y+l][x+m]=='#' && p[t[a]].g[z][l][m]=='#'){
	    f = false;
	    break;
	  }
	}
	if(!f)break;
      }
      if(f){
	for(int l=0;l<p[t[a]].h[z];l++){
	  for(int m=0;m<p[t[a]].w[z];m++){
	    if(p[t[a]].g[z][l][m]=='#')boad[y+l][x+m] = '#';
	  }
	}
	if(backtrack(a+1))return true;
	for(int l=0;l<H;l++)boad[l] = tmp[l];
      }	
    }
  }
  return false;
}

int main(){
  while(cin >> H >> W && (H||W)){
    vector<string> tmp;
    tmp.resize(H);
    boad.resize(H);

    for(int i=0;i<H;i++)cin >> boad[i];

    cin >> n;
    for(int i=0;i<n;i++){
      cin >> h >> w;
      tmp.resize(h);
      int sum = 0;
      for(int j=0;j<h;j++){
	cin >> tmp[j];
	for(int l=0;l<w;l++)
	  if(tmp[j][l]=='#')sum++;
      }
      p[i] = piece(tmp,h,w,sum);
      num[i] = i;
      for(int z=0;z<4;z++){
	for(int y=0;y+p[i].h[z]-1<H;y++){
	  for(int x=0;x+p[i].w[z]-1<W;x++){
	    bool f = true;
	    for(int l=0;l<p[i].h[z];l++){
	      for(int m=0;m<p[i].w[z];m++){
		if(boad[y+l][x+m]=='#' && p[i].g[z][l][m]=='#'){
		  f = false;
		  break;
		}
	      }
	      if(!f)break;
	    }
	    if(f)p[i].pos[z].push_back(P(y,x));
	  }
	}
      }
    }
  
    for(int i=0;i<n;i++)
      for(int j=i+1;j<n;j++)
	if(p[i].s<p[j].s){
	  swap(p[i],p[j]);
	  swap(num[i],num[j]);
	}


    tmp.resize(H);
    for(int i=0;i<H;i++)tmp[i] = boad[i];

    cin >> r;
    for(int i=0;i<r;i++){
      for(int j=0;j<H;j++)boad[j] = tmp[j];
      for(int j=0;j<n;j++)use[j] = false;
      cin >> k;
      int hoge;
      for(int j=0;j<k;j++){
	cin >> hoge;
	use[hoge-1] = true;
      }
      hoge = 0;
      for(int j=0;j<n;j++){
	if(use[num[j]])t[hoge++] = j;
      }

      if(backtrack(0))cout << "YES\n";
      else cout << "NO\n";
    }
  }
}