/*
TASK:ldist
LANG:C++
*/
#include<iostream.h>
#include<string.h>
struct di {char x;int s; }v[100];
struct vi {char x,y;int s; }q[550];
char a[1025],b[1025];
int n,m,p,t;
long sb;
void vhod()
{int i,j;
 cin>>p;
 for(i=1;i<=p;i++)
  cin>>v[i].x>>v[i].s;
 cin>>t;
 for(i=1;i<=t;i++)
  cin>>q[i].x>>q[i].y>>q[i].s;
 cin>>a>>b;
 n=strlen(a);
 m=strlen(b);
}
int upd(int x,int y)
{int i;
 for(i=1;i<=t;i++)
 if(a[x]==q[i].x&&b[y]==q[i].y||a[x]==q[i].y&&b[y]==q[i].x)
  return q[i].s;
 return 100;
}
int ins(int x)
{int i;
 for(i=1;i<=p;i++)
  {if(a[x]==v[i].x)
    return v[i].s;
  }
 return 100;
}
int insb(int x)
{int i;
 for(i=1;i<=p;i++)
  {if(b[x]==v[i].x)
    return v[i].s;
  }
 return 100;
}

void solve()
{int i=0,j,k;
 for(j=0;j<m;j++)
  {if(a[i]==b[j])i++;
   else
    {if(a[i+1]==b[j]||a[i+2]==b[j]||a[i+3]==b[j])
      {sb+=ins(i);i++;j--;
      }
     else
       if(a[i]==b[j+1]||a[i]==b[j+2]||a[i]==b[j+3])
       {
       sb+=insb(j);
       }
     else
     if(a[i+1]==b[i+1])
     {sb+=(upd(i,j)<ins(i)+insb(j))?upd(i,j):ins(i)+insb(j);
      i++;
     }
     else
      {k=upd(i,j);
      sb+=(k<ins(i)+insb(j))?k:ins(i)+insb(j);
      i++;
      }
    }

  }
  for(;i<n;i++)
   {sb+=(upd(i,j)<ins(i)+insb(j))?upd(i,j):ins(i)+insb(j);
   }
 cout<<sb<<endl;
}

int main()
{vhod();
 solve();

return 0;
}
