/*
TASK: LDIST
LANG: C++
*/

#include <cstdio>
#include <cstring>
//#include <conio.h>
using namespace std;
//FILE *fin = fopen("p1.in", "r");

#define MAXN	1100
#define MIN(a,b)	(((a) < (b)) ? (a) : (b))

int f[MAXN][MAXN];
int v[260], d[260][260];
char a[MAXN], b[MAXN];
int n, m;

void readf()
{
	int i, j, k, c;
    char buf1[5], buf2[5];

    for (i = 0; i < 260; ++i) v[i] = 100;
    for (i = 0; i < 260; ++i) for (j = 0; j < 260; ++j) d[i][j] = 100;
    
    scanf("%d", &k);
    for (i = 0; i < k; ++i) {
    	scanf("%s%d", buf1, &c);
        v[buf1[0]] = c;
    }
    scanf("%d", &k);
    for (i = 0; i < k; ++i) {
    	scanf("%s%s%d",buf1,buf2,&c);
        d[buf1[0]][buf2[0]] = c;
        d[buf2[0]][buf1[0]] = c;
    }
    for (i = 0; i < 260; ++i) d[i][i] = 0;

    scanf("%s%s", a+1, b+1);
	m = strlen(a+1);
    n = strlen(b+1);
}

void solve()
{
	int i, j, x, y, z;

    f[0][0] = 0;
    for (j = 1; j <= n; ++j) f[0][j] = f[0][j-1] + v[b[j]];
    for (i = 1; i <= m; ++i) f[i][0] = f[i-1][0] + v[a[i]];

    for (i = 1; i <= m; ++i) {
    	for (j = 1; j <= n; ++j) {
        	if (a[i] == b[j]) {
            	f[i][j] = f[i-1][j-1];
            }
            else {
            	x = f[i-1][j] + v[a[i]];
                y = f[i-1][j-1] + d[a[i]][b[j]];
                z = f[i][j-1] + v[b[j]];
                //printf("%d %d %d\n",x,y,z);
                f[i][j] = MIN(x, MIN(y, z));
            }
        }
    }
    printf("%d\n", f[m][n]);
}

int main()
{
	readf();
    solve();
    
    //getch();
    return 0;
}
