#include<stdio.h>
#include<algorithm>
using namespace std;
char str[11];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int v[210][22][22][4];
int to[22][22][4];
int sig[22][22];
pair<int,int> conv(){
	int row=0;
	int col=0;
	row=str[0]-'a';
	col=str[2]-'0';
	if(str[3])col=col*10+str[3]-'0';
	return make_pair(row,col-1);
}
int main(){
	int a,b,c;
	while(scanf("%d%d",&a,&b),a){
		scanf("%d",&c);
		int d;scanf("%d",&d);
		for(int i=0;i<210;i++)for(int j=0;j<22;j++)for(int k=0;k<22;k++)
			for(int l=0;l<4;l++)v[i][j][k][l]=0;
		for(int i=0;i<a;i++)for(int j=0;j<b;j++){
			for(int k=0;k<4;k++){
				to[i][j][k]=-1;
				if(0<=i+dx[k]&&i+dx[k]<a&&0<=j+dy[k]&&j+dy[k]<b)
					to[i][j][k]=c;
			}
		}
		for(int i=0;i<22;i++)for(int j=0;j<22;j++)sig[i][j]=-1;
		while(d--){
			int e;
			scanf("%s%d",str,&e);
			pair<int,int>pt=conv();
			sig[pt.first][pt.second]=e;
		}
		scanf("%d",&d);
		while(d--){
			scanf("%s",str);
			pair<int,int>p1=conv();
			scanf("%s",str);
			pair<int,int>p2=conv();
			for(int i=0;i<4;i++){
				if(p1.first+dx[i]==p2.first&&p1.second+dy[i]==p2.second)to[p1.first][p1.second][i]=-1;
				if(p2.first+dx[i]==p1.first&&p2.second+dy[i]==p1.second)to[p2.first][p2.second][i]=-1;
			}
		}
		scanf("%d",&d);
		while(d--){
			scanf("%s",str);
			pair<int,int>p1=conv();
			scanf("%s",str);
			pair<int,int>p2=conv();
			int e;scanf("%d",&e);
			for(int i=0;i<4;i++){
				if(p1.first+dx[i]==p2.first&&p1.second+dy[i]==p2.second)to[p1.first][p1.second][i]+=e;
				if(p2.first+dx[i]==p1.first&&p2.second+dy[i]==p1.second)to[p2.first][p2.second][i]+=e;
			}
		}
		scanf("%s",str);
		pair<int,int> S=conv();
		scanf("%s",str);
		pair<int,int> T=conv();
		v[0][S.first][S.second][1]=1;
		int ret=99999999;
		for(int i=0;i<100;i++){
			for(int j=0;j<a;j++)for(int k=0;k<b;k++)for(int l=0;l<4;l++){
				if(!v[i][j][k][l])continue;
	//			printf("%d %d %d %d\n",i,j,k,l);
			//	v[i+1][j][k][l]=1;
			//	if(~sig[j][k]&&((l%2==1&&(i+sig[j][k]*2)%(sig[j][k]*2)>=sig[j][k])||(l%2==0&&(i+sig[j][k]*2)%(sig[j][k]*2)<sig[j][k])))continue;
				for(int m=0;m<4;m++){
					if(!~to[j][k][m])continue;
					if((m^2)==l)continue;
					if(~sig[j+dx[m]][k+dy[m]]&&((m%2==0&&(i+to[j][k][m])%(sig[j+dx[m]][k+dy[m]]*2)>=sig[j+dx[m]][k+dy[m]])||
					(m%2==1&&(i+to[j][k][m])%(sig[j+dx[m]][k+dy[m]]*2)<sig[j+dx[m]][k+dy[m]])))continue;
					v[i+to[j][k][m]][j+dx[m]][k+dy[m]][m]=1;
					if(T.first==j+dx[m]&&T.second==k+dy[m])ret=min(ret,i+to[j][k][m]);
				}
			}
		}
		printf("%d\n",ret);
	}
}