#include <bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f,N=10005;
bool f[N];
int n,m,k;
int dp[N][2005];
struct Node {
int x,y;
} a[N];
struct guan {
int l,h;
} b[N];
int main() {
cin>>n>>m>>k;
memset(dp,INF,sizeof(dp));
for(int i=1; i<=m; i++) dp[0][i]=0;
for(int i=1; i<=n; i++) {
cin>>a[i].x>>a[i].y;
b[i].l=1;
b[i].h=m;
}
for(int i=1; i<=k; i++) {
int p,ll,hh;
cin>>p>>ll>>hh;
f[p]=1;
b[p].l=ll;
b[p].h=hh;
}
for(int i=1; i<=n; i++) {
for(int j=a[i].x+1; j<=m+a[i].x; j++) {
dp[i][j]=min(dp[i-1][j-a[i].x]+1,dp[i][j-a[i].x]+1);
}
for(int j=m+1; j<=m+a[i].x; j++) {
dp[i][m]=min(dp[i][m],dp[i][j]);
}
for(int j=1; j<=m-a[i].y; j++) {
dp[i][j]=min(dp[i][j],dp[i-1][j+a[i].y]);
}
for(int j=1; j<=b[i].l; j++) dp[i][j]=INF;
for(int j=b[i].h+1; j<=m; j++) dp[i][j]=INF;
}
int res=INF;
for(int i=1; i<=m; i++) res=min(res,dp[n][i]);
if(res<INF) {
cout<<"1"<<endl<<res<<endl;
return 0;
} else {
int flag=0;
for(int i=n-1; i>=0; i--) {
for(int j=1; j<=m; j++) {
if(dp[i][j]<INF) {
flag=i;
break;
}
}
if(flag!=0) break;
}
int ans=0;
for(int i=1; i<=flag; i++) ans+=f[i];
cout<<"0"<<endl<<ans<<endl;
}
return 0;
}