#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
struct node
{
int bea,ti;
}sakura[45000];
int dp[5][900000];
int main()
{
char a[10],b[10];
int n;
cin>>a>>b>>n;
int time=0,la=strlen(a),lb=strlen(b),h=0,mi=0;
bool flag=0;
for(int i=0; i<lb; ++i)
{
if(b[i]==':')
{
flag=1;
}
else
{
if(flag==0)
{
h*=10;
h+=b[i]-'0';
}
else
{
mi*=10;
mi+=b[i]-'0';
}
}
}
time=h*60+mi;
flag=0,h=0,mi=0;
for(int i=0; i<la; ++i)
{
if(a[i]==':')
{
flag=1;
}
else
{
if(flag==0)
{
h*=10;
h+=a[i]-'0';
}
else
{
mi*=10;
mi+=a[i]-'0';
}
}
}
time=time-60*h-mi;
int tot=1;
for(int i=1; i<=n; i++)
{
int times,beauty,time_u;
cin>>time_u>>beauty>>times;
if(times==0)
{
times=time/time_u+1;
}
for(int j=1; j<=times; ++j)
{
sakura[tot].bea=beauty;
sakura[tot].ti=time_u;
tot++;
}
}
tot--;
memset(dp,0,sizeof(dp));
for(int i=1; i<=tot; ++i)
{
for(int j=1; j<=time; ++j)
{
if(i%2==1)
{
if(j-sakura[i].ti<0)
{
dp[1][j]=dp[2][j];
}
else
{
dp[1][j]=max(dp[2][j],dp[2][j-sakura[i].ti]+sakura[i].bea);
}
}
else
{
if(j-sakura[i].ti<0)
{
dp[2][j]=dp[1][j];
}
else
{
dp[2][j]=max(dp[1][j],dp[1][j-sakura[i].ti]+sakura[i].bea);
}
}
}
}
if(tot%2==0)
{
cout<<dp[2][time];
}
else
{
cout<<dp[1][time];
}
return 0;
}