#include<iostream>
#include<map>
#include<string.h>
using namespace std;
int counti=0;
int main()
{
int n,c,r;
int wt[102][102];
cin>>n>>c>>r;
while(n!=0||c!=0||r!=0)
{
counti++;
char src[16];
int count=1;
map<string,int> mymap;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(i==j)
wt[i][j]=0;
else wt[i][j]=10002;
}
cin>>src;
mymap[src]=count;
count++;
char d[16];
int w=0;
char arr[2005][16];
while(c--)
{
cin>>d;
mymap[d]=count++;
strcpy(arr[w],d);
w++;
}
char a[16],b[16],v[16];
while(r--)
{
cin>>a>>v>>b;
if(!mymap[a])
mymap[a]=count++;
if(!mymap[b])
mymap[b]=count++;
int num=0,k=2;
while(v[k]>='0'&&v[k]<='9')
{
num*=10;
num+=v[k]-'0';
k++;
}
int len=strlen(v);
if(v[0]=='-')
wt[mymap[a]][mymap[b]]=num;
else if(v[0]=='<'&&v[len-1]=='>')
{wt[mymap[a]][mymap[b]]=num;
wt[mymap[b]][mymap[a]]=num;
}
else wt[mymap[b]][mymap[a]]=num;
}
for(int g=1;g<=n;g++)
{
for(int h=1;h<=n;h++)
{
for(int l=1;l<=n;l++)
{
if(wt[h][l]>wt[h][g]+wt[g][l])
wt[h][l]=wt[h][g]+wt[g][l];
}
}
}
long long ans=0;
for(int i=0;i<w;i++)
{
ans+=wt[1][mymap[arr[i]]];
ans+=wt[mymap[arr[i]]][1];
}
cout<<counti<<". "<<ans<<endl;
cin>>n>>c>>r;
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPG1hcD4KI2luY2x1ZGU8c3RyaW5nLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBjb3VudGk9MDsKaW50IG1haW4oKQp7CmludCBuLGMscjsKaW50IHd0WzEwMl1bMTAyXTsKY2luPj5uPj5jPj5yOwp3aGlsZShuIT0wfHxjIT0wfHxyIT0wKQp7CmNvdW50aSsrOwpjaGFyIHNyY1sxNl07CmludCBjb3VudD0xOwptYXA8c3RyaW5nLGludD4gbXltYXA7CmZvcihpbnQgaT0xO2k8PW47aSsrKQogZm9yKGludCBqPTE7ajw9bjtqKyspCiAgIHsKICAgIGlmKGk9PWopCiAgICB3dFtpXVtqXT0wOwogICBlbHNlIHd0W2ldW2pdPTEwMDAyOwogICAgfQpjaW4+PnNyYzsKbXltYXBbc3JjXT1jb3VudDsKY291bnQrKzsKY2hhciBkWzE2XTsKaW50IHc9MDsKY2hhciBhcnJbMjAwNV1bMTZdOwp3aGlsZShjLS0pCnsKICBjaW4+PmQ7CiAgbXltYXBbZF09Y291bnQrKzsKICBzdHJjcHkoYXJyW3ddLGQpOwogIHcrKzsKfQpjaGFyIGFbMTZdLGJbMTZdLHZbMTZdOwp3aGlsZShyLS0pCnsKICBjaW4+PmE+PnY+PmI7CiAgaWYoIW15bWFwW2FdKQogIG15bWFwW2FdPWNvdW50Kys7CiAgaWYoIW15bWFwW2JdKQogIG15bWFwW2JdPWNvdW50Kys7CiAgaW50IG51bT0wLGs9MjsKICB3aGlsZSh2W2tdPj0nMCcmJnZba108PSc5JykKICB7CiAgICAgbnVtKj0xMDsKICAgICBudW0rPXZba10tJzAnOwogICAgIGsrKzsKICB9CiAgaW50IGxlbj1zdHJsZW4odik7CiAgaWYodlswXT09Jy0nKQogICB3dFtteW1hcFthXV1bbXltYXBbYl1dPW51bTsKICBlbHNlIGlmKHZbMF09PSc8JyYmdltsZW4tMV09PSc+JykKICAgIHt3dFtteW1hcFthXV1bbXltYXBbYl1dPW51bTsKICAgICB3dFtteW1hcFtiXV1bbXltYXBbYV1dPW51bTsKICAgIH0KICBlbHNlIHd0W215bWFwW2JdXVtteW1hcFthXV09bnVtOwp9Cgpmb3IoaW50IGc9MTtnPD1uO2crKykKewogIGZvcihpbnQgaD0xO2g8PW47aCsrKQogIHsKICAgIGZvcihpbnQgbD0xO2w8PW47bCsrKQogICAgewogICAgICAgaWYod3RbaF1bbF0+d3RbaF1bZ10rd3RbZ11bbF0pCiAgICAgICAgd3RbaF1bbF09d3RbaF1bZ10rd3RbZ11bbF07CiAgICB9CiAgfQp9CmxvbmcgbG9uZyBhbnM9MDsgCmZvcihpbnQgaT0wO2k8dztpKyspCnsKIGFucys9d3RbMV1bbXltYXBbYXJyW2ldXV07CiBhbnMrPXd0W215bWFwW2FycltpXV1dWzFdOwp9CmNvdXQ8PGNvdW50aTw8Ii4gIjw8YW5zPDxlbmRsOwpjaW4+Pm4+PmM+PnI7Cn0KcmV0dXJuIDA7Cn0K
NCAyIDUKTmV3VHJveSBNaWR2YWxlIE1ldHJvZGFsZQpOZXdUcm95ICAgJmx0Oy0yMC0mZ3Q7IE1pZHZhbGUKTWlkdmFsZSAgIC0tNTAtJmd0OyBCYWtlcmxpbmUKTmV3VHJveSAgICAmbHQ7LTUtLSBCYWtlcmxpbmUKTWV0cm9kYWxlICZsdDstMzAtJmd0OyBOZXdUcm95Ck1ldHJvZGFsZSAgLS01LSZndDsgQmFrZXJsaW5lCjAgMCAw
4 2 5
NewTroy Midvale Metrodale
NewTroy <-20-> Midvale
Midvale --50-> Bakerline
NewTroy <-5-- Bakerline
Metrodale <-30-> NewTroy
Metrodale --5-> Bakerline
0 0 0