谢助
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+5,M=1e3+5,INF=0x3f3f3f3f;
int f[N][M][2],x[N],y[N],a[N][M],has[N];
int main(){//freopen("P1941_4.in","r",stdin);
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
cin>>x[i]>>y[i];
for(int i=1,p,l,h;i<=k;i++){
cin>>p>>l>>h;
has[p]=1;
for(int j=l+1;j<h;j++)
a[p][j]=1;
}
for(int i=0;i<=n;i++)
if(!has[i])
for(int j=1;j<=m;j++)
a[i][j]=1;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=m;i++)
if(a[0][i])f[0][i][0]=0;
for(int i=1;i<=n;i++){
has[i]+=has[i-1];
for(int j=1;j<=m;j++){
if(j+y[i]<=m)
f[i][j][0]=min(f[i-1][j+y[i]][0],f[i-1][j+y[i]][1]);
//else f[i][j][0]=INF;
}
for(int j=1;j<m;j++){
if(j>=x[i])
f[i][j][1]=min(f[i][j-x[i]][1],min(f[i-1][j-x[i]][0],f[i-1][j-x[i]][1]))+1;
//else f[i][j][1]=INF;
}
for(int j=max(0,m-x[i]);j<m;j++)
f[i][m][1]=min(min(f[i][m][1],f[i][j][1]+1),min(f[i-1][j][0],f[i-1][j][1])+1);
for(int j=1;j<=m;j++)if(!a[i][j])f[i][j][0]=f[i][j][1]=INF;
bool flag=1;
for(int j=1;j<=m;j++){
if(f[i][j][0]<INF||f[i][j][1]<INF)flag=0;
}
if(flag){cout<<0<<endl<<has[i-1]<<endl;return 0;}
}
int ans=INF;
for(int i=1;i<=m;i++)
ans=min(ans,min(f[n][i][0],f[n][i][1]));
cout<<1<<endl<<ans<<endl;
}