//11
#include<iostream>
#include<set>
#include<map>

using namespace std;

int dik(map<string,map<string,int> > d,string s,string g){
  set<string> p;
  map<string,int> n;
  n[s]=0;
  for(int i=0;i<d.size();i++){
    int nm=1<<30;
    string ns;
    for(map<string,int>::iterator it=n.begin();it!=n.end();it++){
      if(!p.count(it->first)&&it->second<nm){
	nm=it->second;
	ns=it->first;
      }
    }
    p.insert(ns);
    for(map<string,int>::iterator it=d[ns].begin();it!=d[ns].end();it++){
      if(!n.count(it->first)||n[it->first]>n[ns]+d[ns][it->first]){
	n[it->first]=n[ns]+d[ns][it->first];
      }
    }
  }
  return n[g];
}

int main(){
  for(int n,m;cin>>n>>m,n|m;){
    string s,p,g;
    cin>>s>>p>>g;
    map<string,map<string,int> > d;
    for(int i=0;i<m;i++){
      string a,b;
      int dd,t;
      cin>>a>>b>>dd>>t;
      d[a][b]=dd/40+t;
      d[b][a]=dd/40+t;
    }
    cout<<dik(d,s,p)+dik(d,p,g)<<endl;
  }
  return 0;
}