#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define MAXN 10001
#define MAXM 1001
#define MAXK 10001
#define NONE 2139062143
using namespace std;
struct _TUBE{
int p,l,h;
}tube[MAXK];
bool cmp(_TUBE t1,_TUBE t2){return t1.p<t2.p;}
int n,m,k,x[MAXN],y[MAXN],tp,Ul,Dl,flag,ansflag,ans,dp[MAXN][MAXM];
int main()
{
cin>>n>>m>>k;
for(int i=0;i<n;i++) cin>>x[i]>>y[i];
for(int i=0;i<k;i++) cin>>tube[i].p>>tube[i].l>>tube[i].h;
sort(tube,tube+k,cmp);
memset(dp,0x7F,sizeof(dp));
for(int j=1;j<=m;j++) dp[0][j]=0;
ansflag=1;
for(int i=1;i<=n;i++)
{
Ul=m;Dl=1;
flag=1;
if(i==tube[tp].p)
{
Ul=min(Ul,tube[tp].h-1);
Dl=max(Dl,tube[tp].l+1);
tp++;
}
for(int j=Dl;j<=Ul;j++)
{
if(j==m)
{
for(int xt=0;xt<x[i-1];xt++)
if(dp[i-1][j-xt]!=NONE)
dp[i][j]=min(dp[i][j],dp[i-1][j-xt]+1);
}
for(int t=1;j-x[i-1]*t>0;t++)
if(dp[i-1][j-x[i-1]*t]!=NONE)
dp[i][j]=min(dp[i][j],dp[i-1][j-x[i-1]*t]+t);
if(j+y[i-1]<=m)
if(dp[i-1][j+y[i-1]]!=NONE)
dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]);
if(dp[i][j]!=NONE)
flag=0;
}
if(flag)
{
ansflag=0;
ans=tp-1;
break;
}
}
if(ansflag)
{
ans=NONE;
for(int j=1;j<=m;j++)
if(dp[n][j]!=NONE)
if(dp[n][j]<ans)
ans=dp[n][j];
}
cout<<ansflag<<endl;
cout<<ans<<endl;
return 0;
}