#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int up[10005],down[10005],cnt=1;
struct node{
int high,low,pos;
}zz[10005];
int f[10005][1005];//i位置j高度
bool pd;
bool cmp(node o,node p){
return o.pos<p.pos;
}
int main(){
int i,j,m,n,k,ans=0x3f3f3f3f;
cin>>n>>m>>k;
for(i=1;i<=n;i++) cin>>up[i]>>down[i];
for(i=1;i<=k;i++){
cin>>zz[i].pos>>zz[i].low>>zz[i].high;
}
sort(zz+1,zz+1+k,cmp);
memset(f,0x3f,sizeof(f));
for(i=1;i<=m;i++){
f[0][m]=0;
}
for(i=1;i<=n;i++){
for(j=1;j<=m-down[i];j++){
f[i][j]=min(f[i][j],f[i-1][j+down[i]]);
}
for(j=up[i]+1;j<=m+up[i];j++){
f[i][j]=min(f[i-1][j-up[i]],f[i][j-up[i]])+1;
}
for(j=m+1;j<=m+up[i];j++){
f[i][m]=min(f[i][j],f[i][m]);
}
if(i==zz[cnt].pos){
// cout<<zz[cnt].pos<<" "<<zz[cnt].low<<" "<<zz[cnt].high<<endl;
for(j=1;j<=m;j++){
// if(f[i][j]!=0x3f3f3f3f) cout<<j<<" ";
if(j<=zz[cnt].low||j>=zz[cnt].high) f[i][j]=0x3f3f3f3f;
}
pd=false;
for(j=1;j<=m;j++){
if(f[i][j]!=0x3f3f3f3f){
pd=true;
break;
}
}
if(!pd){
cout<<0<<endl<<cnt-1;
return 0;
}
else{
cnt++;
}
}
}
for(i=1;i<=m;i++){
ans=min(ans,f[n][i]);
}
if(ans!=0x3f3f3f3f){
cout<<1<<endl<<ans;
}
return 0;
}