#include<iostream>
using namespace std;
int H,W,n,p,flg,T,U[10];
string str;
char t[20][20];
char u[10][20][20];
int h[10],w[10];
int s[10],a;
bool used[10];
bool check();
void dfs(int,int,int);
bool stamp(int,int,int,int);
void stamp2(int,int,int,int);
int main(){
  while(cin>>H>>W){
    if(H==0&&W==0)break;
    T=0;
    for(int i=0;i<H;i++){
      cin>>str;
      for(int j=0;j<W;j++){
	if(str[j]=='.')T++;
	t[i][j]=str[j];
      }   
    }
    cin>>n;
    for(int i=0;i<n;i++){
      U[i]=0;
      cin>>h[i]>>w[i];
      for(int j=0;j<h[i];j++){
	cin>>str;
	for(int k=0;k<w[i];k++){
	  u[i][j][k]=str[k];
	  if(str[k]=='#')U[i]++;
	}
      }
    }
    cin>>p;
    for(int i=0;i<p;i++){
      cin>>a;
      for(int j=0;j<a;j++){cin>>s[j];s[j]--;}
      if(check())cout<<"YES"<<endl;
      else cout<<"NO"<<endl;
    }
  }
  return 0;
}

bool check(){
  flg=0;
  int sum=0;
  for(int i=0;i<n;i++)used[i]=true;
  for(int i=0;i<a;i++){
    sum+=U[s[i]];
    used[s[i]]=false;
  }
  if(T!=sum)return false;
  dfs(0,0,a);
  return flg;
}

void dfs(int y,int x,int c){
  if(flg==1)return;
  if(y==H||c==0){
    
    for(int i=0;i<H;i++){
      for(int j=0;j<W;j++){
	if(t[i][j]=='.')return;
      }
    }
    for(int i=0;i<n;i++)if(used[i]==false)return;
    flg=1;
    return;
  }


  for(int i=0;i<n;i++){
    if(used[i]==true)continue;
    
    for(int j=0;j<4;j++){
      
      if(stamp(y,x,i,j)){
	/*
	cout<<y<<' '<<x<<' '<<i<<' '<<j<<endl;
	for(int ii=0;ii<H;ii++){
	  for(int jj=0;jj<W;jj++){
	    cout<<t[ii][jj];
	  }
	  cout<<endl;
	}
	cout<<endl;
	
	for(int ii=0;ii<h[i];ii++){
	  for(int jj=0;jj<w[i];jj++){

	    cout<<u[i][ii][jj];
	  }
	  cout<<endl;
	}cout<<endl;
	*/

	used[i]=true;
	dfs(y,x,c-1);
	if(flg==1)return;
	stamp2(y,x,i,j);
	/*
cout<<y<<' '<<x<<' '<<i<<' '<<j<<endl;
	for(int ii=0;ii<H;ii++){
	  for(int jj=0;jj<W;jj++){
	    cout<<t[ii][jj];
	  }
	  cout<<endl;
	}
	cout<<endl;
	*/
	used[i]=false;
      }

    }
  }//i
  if(t[y][x]=='#')
    dfs( (x+1==W?y+1:y),(x+1==W?0:x+1),c);


}

bool stamp(int y,int x,int no,int rotate){
  char tmp[20][20],th,tw,nh,nw,temp[20][20];
  th=h[no];
  tw=w[no];
  

  for(int i=0;i<h[no];i++)
    for(int j=0;j<w[no];j++)
      tmp[i][j]=u[no][i][j];

  //cout<<'B'<<endl;
  for(int k=0;k<rotate;k++){

    //cout<<'A'<<endl;
    for(int i=0;i<th;i++){
      for(int j=0;j<tw;j++){
	temp[i][j]=tmp[i][j];
	//cout<<tmp[i][j];
      }
      //cout<<endl;
    }
    //cout<<endl;




    nh=tw;
    nw=th;
    for(int i=0;i<nh;i++){
      for(int j=0;j<nw;j++){
	tmp[i][j]=temp[nw-j-1][i];
      }
    }
    th=nh;
    tw=nw;
  }
  

  if(y+th>H)return false;
  if(x+tw>W)return false;
  if(t[y][x]=='.'&&tmp[0][0]=='.')return false;
  
  for(int i=y;i<y+th;i++){
    for(int j=x;j<x+tw;j++){
      if(tmp[i-y][j-x]=='.')continue;

      if(t[i][j]=='#')return false;
    }
  }

  for(int i=y;i<y+th;i++){
    for(int j=x;j<x+tw;j++){
      if(tmp[i-y][j-x]=='.')continue;
      t[i][j]='#';
    }
  }

  
  return true;
}

void stamp2(int y,int x,int no,int rotate){
  char tmp[20][20],th,tw,nh,nw,temp[20][20];
  th=h[no];
  tw=w[no];
  

  for(int i=0;i<h[no];i++)
    for(int j=0;j<w[no];j++)
      tmp[i][j]=u[no][i][j];


  for(int k=0;k<rotate;k++){

    for(int i=0;i<th;i++){
      for(int j=0;j<tw;j++){
	temp[i][j]=tmp[i][j];
      }
    }

    nh=tw;
    nw=th;
    for(int i=0;i<nh;i++){
      for(int j=0;j<nw;j++){
	tmp[i][j]=temp[nw-j-1][i];
      }
    }
    th=nh;
    tw=nw;
  }

  
  for(int i=y;i<y+th;i++){
    for(int j=x;j<x+tw;j++){
      if(tmp[i-y][j-x]=='.')continue;
      t[i][j]='.';
    }
  }




}