球球了
#include<bits/stdc++.h>
using namespace std;
# define int long long
const int inf=1e18;
long long t,n,m;
long long f[10004][2003],ansout[10004],out;
struct game{
int x,y;
}a[10004];
struct d{
long long p,l,r;
}b[10004];
bool cmp(d pai,d xu){
return pai.p<xu.p;
}
signed main(){
// freopen("4015.in","r",stdin);
//freopen("4015.out","w",stdout);
cin>>m>>n>>t;
for(int i=1;i<=m;i++)cin>>a[i].x>>a[i].y;
for(int i=1;i<=t;i++)cin>>b[i].p>>b[i].l>>b[i].r;
sort(b+1,b+1+t,cmp);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
f[i][j]=inf;
for(int i=1;i<=t;i++){
//cout<<b[i].p;
for(int j=n+1;j>=n+1-b[i].l;j--)f[j][b[i].p]=-1;
for(int j=1;j<=n-b[i].r+1;j++)f[j][b[i].p]=-1;
ansout[b[i].p]=i;
}
/*for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
cout<<f[i][j]<<' ';
}
cout<<endl;
}
cout<<endl<<endl;*/
for(int j=1;j<=m;j++){
bool flag=false;
for(int i=n;i>=1;i--){
if(f[i][j]==-1){/*cout<<-1<<' ';*/continue;}
if(i==1){
for(int k=1;k<=n;k++){
if(f[k][j-1]==-1)continue;
int bushu;
if(k==1)bushu=1;
else bushu=(k-1+a[j].x-1)/a[j].x;
f[i][j]=min(f[i][j],f[k][j-1]+bushu);
}
if(i-a[j].y>0&&f[i-a[j].y][j-1]!=-1)f[i][j]=min(f[i][j],f[i-a[j].y][j-1]);
}else{
/*int k=0;
while(++k){
if(i+a[j].x*k>n)break;
if(f[i+a[j].x*k][j-1]==-1)continue;
f[i][j]=min(f[i][j],f[i+a[j].x*k][j-1]+k);
}*/
if(i-a[j].y>0&&f[i-a[j].y][j-1]!=-1){f[i][j]=f[i-a[j].y][j-1];}
if(i+a[j].x<=n){
if(f[i+a[j].x][j-1]!=-1||f[i+a[j].x][j]!=-1){
//cout<<f[i][j];
int c=min(f[i+a[j].x][j-1]==-1?inf-1:f[i+a[j].x][j-1],f[i+a[j].x][j]==-1?inf-1:f[i+a[j].x][j]);
//cout<<c;
f[i][j]=min(f[i][j],c+1);
}
}
}
if(f[i][j]==inf)f[i][j]=-1;
else flag=true;
//cout<<f[i][j]<< ' ';
}
if(!flag){
cout<<0<<endl<<ansout[j]-1;
return 0;
}
//cout<<endl;
}
cout<<1<<endl;
int ans=inf;
for(int i=1;i<=n;i++){
//cout<<f[i][m]<<' ';
if(f[i][m]==0)continue;
ans=min(f[i][m]==-1?inf:f[i][m],ans);
}
cout<<ans;
return 0;
}