#include<bits/stdc++.h>
using namespace std;
int n,m,k,x[10005],y[10005],f[10005][1005][2],cnt[10005];
struct funk{
int l,h;
}t[10005];
int main(){
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++)
scanf("%d%d",&x[i],&y[i]);
for(int i=0;i<=n;i++)
t[i].l=1,t[i].h=m;
for(int i=1;i<=k;i++){
int p;
scanf("%d",&p),cnt[p]++;
scanf("%d%d",&t[p].l,&t[p].h);
t[p].l++,t[p].h--;
}
for(int i=1;i<=n;i++)
cnt[i]+=cnt[i-1];
memset(f,0x3f,sizeof(f));
for(int i=1;i<=m;i++)
f[0][i][0]=f[0][i][1]=0;
for(int i=1;i<=n;i++){
for(int j=t[i-1].l;j<=t[i-1].h;j++){
int now=j-y[i-1];
if(now>=t[i].l&&now<=t[i].h)
f[i][now][0]=min(f[i][now][0],min(f[i-1][j][0],f[i-1][j][1]));
}
for(int j=t[i-1].l;j<=t[i-1].h;j++){
int now=min(j+x[i-1],m);
f[i][now][1]=min(f[i][now][1],min(f[i-1][j][0],f[i-1][j][1])+1);
}
for(int j=x[i-1]+1;j<=t[i].h;j++){
f[i][j][1]=min(f[i][j][1],f[i][j-x[i-1]][1]+1);
}
bool can=0;
for(int j=t[i].l;j<=t[i].h;j++)
if(f[i][j][0]<=1e9||f[i][j][1]<=1e9)
can=1;
if(!can){
printf("%d\n%d",0,cnt[i-1]);
return 0;
}
}
int ans=1e9;
for(int i=1;i<=m;i++)
ans=min(ans,min(f[n][i][0],f[n][i][1]));
printf("%d\n%d",1,ans);
return 0;
}