#include<iostream>#include<cstdio>#include<map>#include<string.h>#define maxint 10000000using namespace std;int n,c,r;int ma[110][110];map<string,int>Map;void floyd(){ for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(ma[i][j]>ma[i][k]+ma[k][j]) ma[i][j]=ma[i][k]+ma[k][j];}int main(){ int t=0; string ans[1100]; while(scanf("%d%d%d",&n,&c,&r)!=EOF) { if(n==0&&c==0&&r==0) break; t++; Map.clear(); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) { ma[i][j]=ma[j][i]=maxint; if(i==j) ma[i][j]=0; } int m=0; for(int i=0; i<=c; i++) { cin>>ans[i]; if(!Map[ans[i]]) Map[ans[i]]=++m; } string a,b,cc; for(int i=0; i<r; i++) { int tem=0; int f1=0,f2=0; cin>>a>>b>>cc; if(!Map[a]) Map[a]=++m; if(!Map[cc]) Map[cc]=++m; if(b[0]=='<') f1=1; if(b[b.size()-1]=='>') f2=1; for(int j=0; j<b.size(); j++) { if(b[j]>='0'&&b[j]<='9') tem=(b[j]-'0'+tem)*10; } if(f1==1&&tem/10<ma[Map[a]][Map[cc]]) ma[Map[a]][Map[cc]]=tem/10; if(f2==1&&tem/10<ma[Map[cc]][Map[a]]) ma[Map[cc]][Map[a]]=tem/10; } floyd(); int sum=0,ii; for(ii=1; ii<=c; ii++) { sum+=ma[Map[ans[0]]][Map[ans[ii]]]; sum+=ma[Map[ans[ii]]][Map[ans[0]]]; } printf("%d. %d\n",t,sum); } return 0;}/*4 2 5NewTroy Midvale MetrodaleNewTroy <-20-> MidvaleMidvale --50-> BakerlineNewTroy <-5-- BakerlineMetrodale <-30-> NewTroyMetrodale --5-> Bakerline0 0 0*/