#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

struct P{
  int h,w;
  vector<vector<char> > g;
  P(){
    cin>>h>>w;
    g=vector<vector<char> >(h,vector<char>(w));
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	char c;
	cin>>c;
	g[i][j]=c=='#';
      }
    }
  }
  bool is_filled()const{
    for(auto &e:g){
      for(auto &f:e){
	if(!f)return false;
      }
    }
    return true;
  }
  void rot(){
    vector<vector<char> > n(w,vector<char>(h));
    for(int i=0;i<h;i++){
      for(int j=0;j<w;j++){
	n[j][h-1-i]=g[i][j];
      }
    }
    g=n;
    swap(h,w);
  }
  bool add(const P &p,int py,int px){
    for(int i=0;i<p.h;i++){
      for(int j=0;j<p.w;j++){
	if(p.g[i][j]){
	  int y=py+i;
	  int x=px+j;
	  if(h<=y||w<=x||g[y][x])return false;
	  g[y][x]=true;
	}
      }
    }
    return true;
  }
};

vector<P> pieces;

bool rec(const P &b,vector<int> r){
  if(r.empty())return b.is_filled();
  int x=r.back();
  r.pop_back();
  P p=pieces[x];
  for(int k=0;k<4;k++){
    p.rot();
    for(int i=0;i<b.h;i++){
      for(int j=0;j<b.w;j++){
	P c=b;
	if(c.add(p,i,j)){
	  if(rec(c,r))return true;
	}
      }
    }
  }
  return false;
}
      
int main(){
  for(;;){
    P b;
    if(b.h==0)break;
    int n;
    cin>>n;
    pieces.clear();
    for(int i=0;i<n;i++){
      P cp;
      pieces.push_back(cp);
    }
    int p;
    cin>>p;
    while(p--){
      int k;
      cin>>k;
      int sp=0;
      vector<int> cp;
      while(k--){
	int t;
	cin>>t;
	sp|=1<<t-1;
	cp.push_back(t-1);
      }
      sort(begin(cp),end(cp),[&](int a,int b){
	  return pieces[a].h*pieces[a].w<pieces[b].h*pieces[b].w;
	});
      cout<<(rec(b,cp)?"YES":"NO")<<endl;
    }
  }
}

    
    