#include<bits/stdc++.h>
const int Max = 10100;
int dp[Max][1010],x,y,k,u[Max],d[Max],p,l[Max],h[Max],tx,fto,ans,pas;
bool vis[Max];
using namespace std;
inline bool judge(int x,int nh)
{
if((vis[x]==0&&nh>0)||(nh>l[x]&&nh<h[x])) return 1;
return 0;
}
int main()
{
ios::sync_with_stdio(0);
memset(dp,127,sizeof(dp)),ans=dp[0][0];
cin>>x>>y>>k;
for(register int i=1;i<=x;i++) cin>>u[i]>>d[i];
for(register int i=0;i<k;i++) cin>>p,cin>>l[p]>>h[p],vis[p]=1;
for(register int i=1;i<=y;i++) dp[0][i]=0;
for(register int i=1;i<=x;i++)
{
int q=1,temp=y;
if(vis[i-1]) q=l[i-1],temp=h[i-1];
for(register int j=q;j<=temp;j++)
{
if(dp[i-1][j]!=dp[0][0])
{
for(register int t=1;t*u[i]+j<=y+u[i]+1;t++)
{
if(judge(i,t*u[i]+j))
{
if(j+t*u[i]>=y)
{
dp[i][y]=min(dp[i-1][j]+t,dp[i][y]);
break;
}
dp[i][j+t*u[i]]=min(dp[i-1][j]+t,dp[i][j+t*u[i]]),fto=i;
if(!u[i]) break;
}
}
if(judge(i,j-d[i])) dp[i][j-d[i]]=min(dp[i-1][j],dp[i][j-d[i]]),fto=i;
}
}
if(fto==i&&vis[i]) pas++;
}
cout<<(fto==x)<<"\n";
for(register int i=1;i<=y;i++) ans=min(ans,dp[x][i]);
if(ans==dp[0][0]) cout<<pas;
else cout<<ans;
}