#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=10010;
const int M=1010;
int n,m,k;
struct node
{
int x,y,l,h;
}a[N];
int f[N][M];
int b[N],tot;
int main()
{
cin>>n>>m>>k;
for(int i=0;i<n;i++)
{
cin>>a[i].x>>a[i].y;
a[i].h=m+1; a[i].l=0;
}
a[n].h=m+1; a[n].l=0;
for(int p,l,r,i=1;i<=k;i++)
{
cin>>p; b[++tot]=p;
cin>>a[p].l>>a[p].h;
}
memset(f,127,sizeof(f));
for(int i=1;i<=m;i++) f[0][i]=0;
for(int i=0;i<n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][min(j+a[i].x,m)]=min(f[i][j]+1,f[i][min(j+a[i].x,m)]);
if(j-a[i].y<a[i+1].h&&j-a[i].y>a[i+1].l) f[i+1][j-a[i].y]=min(f[i][j],f[i+1][j-a[i].y]);
if(min(m,j+a[i].x)<a[i+1].h&&j+a[i].x>a[i+1].l) f[i+1][min(m,j+a[i].x)]=min(f[i][j]+1,f[i+1][min(m,j+a[i].x)]);
}
}
int ok=0,ans=2139062143;
for(int i=1;i<=m;i++)
{
if(f[n][i]<2139062143) ok=1;
ans=min(ans,f[n][i]);
}
cout<<ok<<endl;
if(ok==1)
{
cout<<ans<<endl;
return 0;
}
ans=0;
for(int i=1;i<=tot;i++)
{
for(int j=a[b[i]].l+1;j<a[b[i]].h;j++)
{
if(f[b[i]][j]<2139062143)
{
ans++;
break;
}
}
}
cout<<ans<<endl;
return 0;
}