/*
  AOJ 1022
  Title:
  @kankichi573
*/
#include <stdio.h>
#include <string.h>
#include <limits.h>
#include <setjmp.h>

jmp_buf jb;
char ban[10][11];
char formula[20][11];
int  form_cnt;
char list[10];
int var_cnt;
int n,W,H;

int myatoi(char s[])
{
  if(s[0]=='0' && isdigit(s[1]))
    longjmp(jb,1);
  return(atoi(s));
}


int comp_char(const void *a, const void *b)
{
    return *(char *)a - *(char *)b;
}
int r_compare(const void *a, const void *b)
{
    return *(char *)b - *(char *)a;
}

int next_perm(char a[],int n,int r)
{
  int i,j,min_p;
  char p,wk,min_;

  if(a[n-2]<a[n-1])
    {
	wk=a[n-1];
	a[n-1]=a[n-2];
	a[n-2]=wk;
	return(-1);
    }

  for(i=n-1;i>=1;i--)
    if(a[i]>a[i-1])
      {
	p=a[i-1];
	min_=CHAR_MAX;
	for(j=i;j<n;j++)
	  if(a[j] > p && min_ > a[j])
	    {
	      min_=a[j];
	      min_p=j;
	    }
	wk=a[min_p];
	a[min_p]=a[i-1];
	a[i-1]=wk;
	qsort(&a[i],n-i,sizeof(char),comp_char);
	qsort(a+r,n-r,sizeof(char),r_compare);
        return(-1);
      }
 
  return(0);
}


extern int eval_1(char form[],int len)
{
  int i,op1,op2;
#ifdef DEBUG1
  printf("%d|",len);
  for(i=0;i<len;i++)
    printf("%c",form[i]);
  printf("\n");
#endif
  if(!isdigit(form[0]))
    longjmp(jb,1);
  if(!isdigit(form[len-1]))
    longjmp(jb,1);

  for(i=0;i<len;i++)
    if(form[i]=='*'||form[i]=='/')
      goto NEXT;
  return(myatoi(form));
 NEXT:
  for(i=len-1;i>=0;i--)
    if(form[i]=='*')
      {
	return(eval_1(form,i)*myatoi(form+i+1));
      }
    else if(form[i]=='/')
      {
	op1=eval_1(form,i);
	op2=myatoi(form+i+1);
	if(op2==0 || (op1 % op2)>0)
	  longjmp(jb,1);
	else
	  return(op1/op2);
      }

}

extern int eval_m(char form[],int len)
{
  int i,op1,op2;
#ifdef DEBUGM
  printf("%d|",len);
  for(i=0;i<len;i++)
    printf("%c",form[i]);
  printf("\n");
#endif
  for(i=0;i<len;i++)
    if(form[i]=='+'||form[i]=='-')
      goto NEXT;
  return(eval_1(form,len));
 NEXT:
  for(i=len-1;i>=0;i--)
    if(form[i]=='+')
      {
	return(eval_m(form,i)+eval_1(form+i+1,len-i-1));
      }
    else if(form[i]=='-')
      {
	op1=eval_m(form,i);
	op2=eval_1(form+i+1,len-i-1);
	return(op1-op2);
      }
}

eval_eq(char form[],int len)
{
  int i,op1,op2;
#ifdef DEBUGF
  printf("%d|",len);
  for(i=0;i<len;i++)
    printf("%c",form[i]);
  printf("\n");
#endif
  for(i=0;i<len;i++)
    if(form[i]=='=')
      goto NEXT;
  longjmp(jb,1);;

 NEXT:
  for(i=len-1;i>=0;i--)
    if(form[i]=='=')
      {
	return (eval_m(form,i)==eval_m(form+i+1,len-i-1))?1:0;
      }
}

void prepare1()
{
  int i,j;
  var_cnt=0;
  for(i=0;i<H;i++)
    for(j=0;j<W;j++)
      if(ban[i][j]=='.')
	ban[i][j]='a'+var_cnt++;
  qsort(list,n,sizeof(char),comp_char);
}

void replace(char from[],char to[],char list[])
{
  char c;

  while((c=*from))
    {
      if(islower(c))
	c=list[c-'a'];
      *to=c;
      from++;
      to++;
    }

}

int solve()
{
  int i,ret;
  char expr[11];

  do
    {
      /*      
      for(i=0;i<var_cnt;i++)
	printf("%c|",list[i]);
      printf("\n");
      */
       
      for(i=0;i<form_cnt;i++)
      {
	memset(expr,0,sizeof(expr));
	replace(&formula[i][0],expr,list);
	
	if(setjmp(jb)==0)
	  ret=eval_eq(expr,strlen(expr));
	else
	  {
	    ret=-1;
	  }
	//printf("%s %d\n",expr,ret);
	if(ret!=1)
	  goto NEXT;
       }
      return(1); 
    NEXT: ;
      
    }
  while(next_perm(list,n,var_cnt));
  return(0);
}

void prepare2()
{
  int i,j,k;

  form_cnt=0;
  for(i=0;i<H;i++)
    {
      for(j=0;j<W-4;j++)
	if(ban[i][j]!='#' && ban[i][j+1]!='#') 
	  {
	    k=0;
	    while(ban[i][j+k]!='#' && j+k<W)
	      {
		formula[form_cnt][k]=ban[i][j+k];
		k++;
	      }
	    form_cnt++;
	    break;
	  }
    }
  for(i=0;i<W;i++)
    {
      for(j=0;j<H-4;j++)
	if(ban[j][i]!='#' && ban[j+1][i]!='#') 
	  {
	    k=0;
	    while(ban[j+k][i]!='#' && j+k<H)
	      {
		formula[form_cnt][k]=ban[j+k][i];
		k++;
	      }
	    form_cnt++;
	    break;
	  }
    }
}
show()
{
  int i,j;
  var_cnt=0;
  for(i=0;i<H;i++)
    {
      for(j=0;j<W;j++)
	printf("%c|",ban[i][j]);
      printf("\n");
    }
}

void show_formula()
{
  int i;
  for(i=0;i<form_cnt;i++)
    printf("%s\n",&formula[i][0]);
}


main()
{
  int i,ret;
  char buf[22];

  (scanf("%d %d",&H,&W)  && (H||W));
    {
      memset(formula,0,sizeof(formula));
      //printf("HW=%d %d\n",H,W);
      for(i=0;i<H;i++)
	scanf("%s",&ban[i][0]);
      scanf("%d ",&n);
      fgets(buf,22,stdin);
      for(i=0;i<n;i++)
	list[i]=buf[i*2];
      prepare1();
      //show();
      prepare2();
      //show_formula();
      qsort(list+var_cnt,n-var_cnt,sizeof(char),r_compare);
      ret=solve();
      printf("%s\n",ret?"Yes":"No");
    }
  return(0);
}