#include <bits/stdc++.h>
#define N 10000
#define M 1000
#define K 1e+9
using namespace std;
int n,m,k,dp[N][M],ans,sum;
struct click{
int x,y;
}w[N];
struct pipe{
int l,r;
}q[N];
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*f;
}
void loading(){
n=read(); m=read(); k=read();
for(int i=0;i<n;i++){ w[i].x=read(); w[i].y=read();}
for(int i=1;i<=k;i++){
int s=read();
q[s].l=read(); q[s].r=read();
}
ans=1e+9;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++) dp[i][j]=K;
if(q[i].l==q[i].r) q[i].r=m+1;
}
}
bool ok(int i,int y){
if(y>m&&q[i].r==m+1) return 1;
if(y<q[i].r && y>q[i].l) return 1;
return 0;
}
void solve(){
for(int i=0;i<n;i++){
bool f=0;
for(int k=1;k<=m;k++){
if(dp[i][k]==K) continue;
if(ok(i+1,k-w[i].y)){
f=1;
dp[i+1][k-w[i].y]=min(dp[i][k],dp[i+1][k-w[i].y]);
}
int t=k+w[i].x,num=1;
while(ok(i+1,t)){
f=1;
if(t>m && q[i+1].r==m+1) { dp[i+1][m]=min(dp[i+1][m],dp[i][k]+num); break;}
dp[i+1][t]=min(dp[i+1][t],dp[i][k]+num);
t+=w[i].x; num++;
}
}
if(!f){ cout<<0<<endl<<sum; return;}
if(q[i].r-q[i].l<=m && i) sum++;
for(int i=1;i<=m;i++) ans=min(ans,dp[n][i]);
}
cout<<1<<endl<<ans;
}
int main(){
loading();
solve();
return 0;
}