#include <iostream>
#include <vector>
#include <algorithm>
#include <cstring>
#include <fstream>

using namespace std;


typedef long long ll;
int dy[201];
int dx[201];
ll dp[1010][1<<12];
char field[101][101];
int dmg[201];
int stepDmg[2001];
int portions[101];
int inithp;
int maxhp;
int r,c;
int step;
int S,P,T;


const ll INF=100000000000000LL;

//// S[©çßÄX^[gÖü©¤
//ll dfs(int pos,int s){
//	if(pos==-1){
//		ll sum=0;
//		// Ü¾gpµÄ¢È¢àÌð·×Äg¤
//		for(int i=0;i<P;i++)if(!((s>>i)&1))sum+=portions[i];
//		return min(maxhp*1LL,sum+inithp);
//	}
//	else if(dp[pos][s]!=-1)return dp[pos][s];
//	ll res=-INF;
//	// Ü¾gpµÄ¢È¢portionðgp
//	for(int k=0;k<P;k++)
//		if(!((s>>k)&1))if(dfs(pos,s|(1<<k))>0)res=max(res,min(dfs(pos,s|(1<<k))+portions[k],maxhp*1LL));
//	// ÌêÖ
//	res=max(res,dfs(pos-1,s)-stepDmg[pos]);
//	if(res<0)res=-INF;
//	return dp[pos][s]=res;
//}


void input(){
	cin>>r>>c;
	for(int i=0;i<r;i++)for(int j=0;j<c;j++)cin>>field[i][j];
	cin>>T;
	for(int i=0;i<T;i++){
		char ch;
		int m;
		cin>>ch>>m;
		dmg[ch]=m;
	}
	cin>>S;
	int cx=0;
	int cy=0;
	for(int i=0;i<S;i++){
		char ch;
		int quan;
		cin>>ch>>quan;
		for(int j=0;j<quan;j++){
			int ny=cy+dy[ch];
			int nx=cx+dx[ch];
			stepDmg[step]=dmg[field[ny][nx]];
			step++;
			cx=nx;
			cy=ny;
		}
	}
	cin>>P;
	for(int i=0;i<P;i++)cin>>portions[i];
}

int main(){
	dy['U']=-1;
	dx['U']=0;
	dy['R']=0;
	dx['R']=1;
	dy['D']=1;
	dx['D']=0;
	dy['L']=0;
	dx['L']=-1;
	while(cin>>inithp>>maxhp&&(inithp|maxhp)){
		step=0;
		input();
		//memset(dp,-1,sizeof(dp));
		//for(int i=0;i<1010;i++)for(int j=0;j<(1<<12);j++)dp[i][j]=-1;
		//if(dfs(step-1,0)>0)cout<<"YES"<<endl;
		//else cout<<"NO"<<endl;
		// startn_ÅÍ,cÁ½¨ð·×Äg¤
		for(int j=0;j<(1<<P);j++){
			ll sum=0;
			for(int i=0;i<P;i++)if(!((j>>i)&1))sum+=portions[i];
			dp[0][j]=min(1LL*maxhp,sum+inithp);
		}
		for(int i=0;i<step;i++){
			for(int j=(1<<P)-1;j>=0;j--){
				ll res=-INF;
				int s=j;
				int pos=i;
				// Ü¾gpµÄ¢È¢portionðgp
				for(int k=0;k<P;k++)
					if(!((s>>k)&1)&&dp[pos+1][s|(1<<k)]>0){
						res=max(res,min(dp[pos+1][s|(1<<k)]+portions[k],maxhp*1LL));
					}
				// ÌêÖ
				res=max(res*1LL,dp[pos][s]-stepDmg[pos]);
				if(res<0)res=-INF;
				dp[pos+1][s]=min(maxhp*1LL,res);
			}
		}
		bool ok=false;
		for(int j=0;j<(1<<P);j++)if(dp[step][j]>0)ok=true;
		if(ok)cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}
	return 0;
}