#include<bits/stdc++.h>
using namespace std;
#define maxn 10005
int read()
{
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))
{
x=x*10+ch-'0';
ch=getchar();
}
return x*f;
}
int dp[maxn][1005],up[maxn],down[maxn],n,m,k,flag[maxn],sum,inf;
bool pd;
struct data
{
int low,high;
}l[maxn];
int main()
{
n=read();m=read();k=read();
for(int i=0;i<n;i++)
{
up[i]=read();down[i]=read();
l[i].high=m+1;l[i].low=0;
}
l[n].high=m+1;l[n].low=0;
for(int i=1;i<=k;i++)
{
int x,a,b;
x=read();a=read();b=read();
flag[x]=1;
l[x].low=a;l[x].high=b;
}
memset(dp,63,sizeof(dp));
inf=dp[0][0];
for(int j=0;j<=m;j++)
dp[0][j]=0;
for(int i=1;i<=n;i++)
{
pd=0;
for(int j=1;j<=m;j++)
{
if(j<=l[i].low||j>=l[i].high)
continue;
if(j-up[i-1]>0)
{
dp[i][j]=min(dp[i][j],dp[i-1][j-up[i-1]]+1);
dp[i][j]=min(dp[i][j],dp[i][j-up[i-1]]+1);
}
if(j==m)
{
for(int k=m-up[i-1];k<=m;k++)
{
dp[i][m]=min(dp[i-1][k]+1,dp[i][m]);
}
}
if(j+down[i-1]<=m)
{
dp[i][j]=min(dp[i][j],dp[i-1][j+down[i-1]]);
}
if(dp[i][j]<inf)
pd=1;
}
if(!pd)
{
printf("0\n%d",sum);
return 0;
}
if(flag[i])
sum++;
}
int mint=2e9;
for(int j=1;j<=m;j++)
mint=min(mint,dp[n][j]);
printf("1\n%d",mint);
return 0;
}
``` c++