#include<deque>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
#include<string>
#include<iostream>
#include<sstream>
#include<cmath>
#include<cstdio>
#include<cstring>
using namespace std;
class P{
public:
  int a[20][20][4][20],b[20][20][4][20],h,w,n;
  bool c[20][20][4];
  P(){
  }
  P(int y,int x){
    memset(a,0,sizeof(a));
    h=y;
    w=x;
    n=0;
  }
  void set(int p,int y,int x){
    a[0][0][p][y]|=1<<x;
  }
  void init(P& p){
    int i,j,k,l;
    for(i=1;i<4;++i){
      for(j=0;j<h;++j){
	for(k=0;k<w;++k){
	  if((a[0][0][i-1][j]>>k)&1)
	    set(i,k,h-j);
	}
      }
    }
    for(i=0;i<p.h-h+1;++i)
      for(j=0;j<p.w-w+1;++j)
	for(k=0;k<4;k+=2)
	  for(l=0;l<h;++l)
	    a[i][j][k][l+i]=a[0][0][k][l]<<j;
    for(i=0;i<p.h-w+1;++i)
      for(j=0;j<p.w-h+1;++j)
	for(k=1;k<4;k+=2)
	  for(l=0;l<h;++l)
	    a[i][j][k][l+i]=a[0][0][k][l]<<j;
    for(i=0;i<p.h-h+1;++i)
      for(j=0;j<p.w-w+1;++j)
	for(k=0;k<4;k+=2)
	  for(l=0;l<p.h;++l)
	    b[i][j][k][l]=~a[i][j][k][l];
    for(i=0;i<p.h-w+1;++i)
      for(j=0;j<p.w-h+1;++j)
	for(k=1;k<4;k+=2)
	  for(l=0;l<p.h;++l)
	    b[i][j][k][l]=~a[i][j][k][l];
    for(i=0;i<p.h-h+1;++i)
      for(j=0;j<p.w-w+1;++j)
	for(k=0;k<4;k+=2)
	  c[i][j][k]=p.isset(a[i][j][k]);
    for(i=0;i<p.h-w+1;++i)
      for(j=0;j<p.w-h+1;++j)
	for(k=1;k<4;k+=2)
	  c[i][j][k]=p.isset(a[i][j][k]);
  }
  bool isset(int p[]){
    int i;
    for(i=0;i<h;++i){
      if(a[0][0][0][i]&p[i])
	break;
    }
    return i==h;
  }
  void mask(int p[]){
    int i;
    for(i=0;i<h;++i)
      a[0][0][0][i]|=p[i];
  }
  void unmask(int p[]){
    int i;
    for(i=0;i<h;++i)
      a[0][0][0][i]&=p[i];
  }
  void print(P& p,int dx,int dy,int q){
    int i,j;
    for(i=0;i<p.h;++i){
      for(j=0;j<p.w;++j){
	if((a[dy][dx][q][i]>>j)&1)
	  cout<<'#';
	else
	  cout<<'.';
      }
      cout<<endl;
    }
  }
};
vector<int> c;
P a,b[10];
bool fi(int p){
  int i,j,k;
  if(p<0)
    return true;  
  for(i=0;i<a.h-b[c[p]].h+1;++i){
    for(j=0;j<a.w-b[c[p]].w+1;++j){
      for(k=0;k<4;k+=2){
	if(!b[c[p]].c[i][j][k]||!a.isset(b[c[p]].a[i][j][k]))
	  continue;
	a.mask(b[c[p]].a[i][j][k]);
	if(fi(p-1)){
	  a.unmask(b[c[p]].b[i][j][k]);
	  return true;
	}
	a.unmask(b[c[p]].b[i][j][k]);
      }
    }
  }
  for(i=0;i<a.h-b[c[p]].w+1;++i){
    for(j=0;j<a.w-b[c[p]].h+1;++j){
      for(k=1;k<4;k+=2){
	if(!b[c[p]].c[i][j][k]||!a.isset(b[c[p]].a[i][j][k]))
	  continue;
	a.mask(b[c[p]].a[i][j][k]);
	if(fi(p-1)){
	  a.unmask(b[c[p]].b[i][j][k]);
	  return true;
	}
	a.unmask(b[c[p]].b[i][j][k]);
      }
    }
  }
  return false;
}
int main(){
  int i,j,k;
  int h,w;
  while(cin>>h>>w,h||w){
    //P a;
    a=P(h,w);
    for(i=0;i<h;++i){
      for(j=0;j<w;++j){
	char c;
	cin>>c;
	if(c=='#'){
	  a.set(0,i,j);
	  ++a.n;
	}
      }
    }
    int n;
    cin>>n;
    //P b[10];
    for(i=0;i<n;++i){
      cin>>h>>w;
      b[i]=P(h,w);
      for(j=0;j<h;++j){
	for(k=0;k<w;++k){
	  char c;
	  cin>>c;
	  if(c=='#'){
	    b[i].set(0,j,k);
	    ++b[i].n;
	  }
	}
      }
      b[i].init(a);
    }
    int m;
    cin>>m;
    for(i=0;i<m;++i){
      int l;
      cin>>l;
      c.clear();
      c.assign(l,0);
      int sm=a.h*a.w-a.n;
      for(j=0;j<l;++j){
	cin>>c[j];
	--c[j];
	sm-=b[c[j]].n;
      }
      if(sm||!fi(l-1)){
	cout<<"NO"<<endl;
      }else{
	cout<<"YES"<<endl;
      }
    }
  }
  return 0;
}