Code:
#include<bits/stdc++.h>
using namespace std;
int n,m,k,x[10010],y[10010],p,l,h,u[10010],d[10010],dp[10010][1010],mins=1e9;
bool vis[100010];
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++){
u[i]=m+1;
d[i]=0;
}
for(int i=1;i<=k;i++){
scanf("%d%d%d",&p,&l,&h);
vis[p]=1;
u[p]=h;
d[p]=l;
}
memset(dp,127,sizeof(dp));
for(int i=1;i<=m;i++) dp[0][i]=1;
for(int i=1;i<=n;i++){
for(int j=d[i]+1;j<=u[i]-1;j++){
for(int z=1;j-z*x[i-1]>=d[i-1]+1;z++) dp[i][j]=min(dp[i][j],dp[i-1][j-z*x[i-1]]+z);
if(j==m){
for(int z=u[i-1]-1;z>j-x[i-1];z--) dp[i][j]=min(dp[i][j],dp[i-1][z]+1);
}
if(j+y[i-1]<=u[i-1]-1) dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]);
}
}
for(int i=1;i<=m;i++) mins=min(mins,dp[n][i]);
if(mins==1e9){
printf("0\n");
int p=0;
for(int i=n;i>=1;i--){
bool flag=0;
for(int j=1;j<=m;j++){
if(dp[i][j]<=1e9){
flag=1;
break;
}
}
if(flag){
printf("%d",k-p);
break;
}
if(vis[i]) p++;
}
}else printf("1\n%d",mins-1);
return 0;
}