#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
#include <queue>
// by zrt
// problem:
// 无论你在什么时候开始,重要的是开始以后就不要停止。
using namespace std ;
typedef long long LL ;
const double eps(1e-10) ;
const int inf(0x3f3f3f3f) ;
map<string,int> mp;
int S,T;
string s,u,v;
int num;
int n,m;
int limited;
int tima[5006],timb[5006],cap[5006];
vector<int> in[160],out[160];
int H[12000],X[5000000],P[5000000],tot,flow[5000000];
inline void add(int x,int y,int z){
P[++tot]=y;X[tot]=H[x];H[x]=tot;flow[tot]=z;
}
int d[12000];
queue<int> q;
bool bfs(){
memset(d,0,sizeof d);
d[S]=1;q.push(S);int x;
while(!q.empty()){
x=q.front();q.pop();
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&!d[P[i]]){
d[P[i]]=d[x]+1;
q.push(P[i]);
}
}
}
return d[T];
}
int dfs(int x,int a){
if(x==T||a==0) return a;
int f=a,tmp;
for(int i=H[x];i;i=X[i]){
if(flow[i]>0&&d[P[i]]==d[x]+1){
tmp=dfs(P[i],min(flow[i],a));
a-=tmp;
flow[i]-=tmp;
flow[i^1]+=tmp;
if(!a) break;
}
}
if(f==a) d[x]=-1;
return f-a;
}
int Dinic(){
int f(0);
while(bfs()) f+=dfs(S,inf);
return f;
}
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin) ;
freopen("out.txt","w",stdout) ;
#endif
S=11000,T=11111;
while(~scanf("%d",&n)){
tot=1,memset(H,0,sizeof H);num=3;
for(int i=0;i<=n;i++) in[i].clear(),out[i].clear();
mp.clear();
cin>>s;
mp[s]=1;
cin>>s;
mp[s]=2;
scanf("%d",&limited);
limited=(limited%100)+(limited/100)*60;
scanf("%d",&m);
for(int i=0;i<m;i++){
cin>>u>>v;
if(mp.find(u)==mp.end()) mp[u]=num++;
if(mp.find(v)==mp.end()) mp[v]=num++;
scanf("%d%d%d",&cap[i],&tima[i],&timb[i]);
tima[i]=(tima[i]%100)+(tima[i]/100)*60;
timb[i]=(timb[i]%100)+(timb[i]/100)*60;
out[mp[u]].push_back(i);in[mp[v]].push_back(i);
if(timb[i]<=limited) add(i,i+m,cap[i]),add(i+m,i,0);
}
for(int i=0;i<out[1].size();i++){
add(S,out[1][i],inf);
add(out[1][i],S,0);
}
for(int i=0;i<in[2].size();i++){
add(in[2][i]+m,T,inf);
add(T,in[2][i]+m,0);
}
for(int i=1;i<=n;i++){
for(int j=0;j<in[i].size();j++){
for(int k=0;k<out[i].size();k++){
if(tima[out[i][k]]-timb[in[i][j]]>=30&&tima[out[i][k]]<=limited){
add(in[i][j]+m,out[i][k],inf);
add(out[i][k],in[i][j]+m,0);
}
}
}
}
printf("%d\n",Dinic());
}
return 0 ;
}