#include<bits/stdc++.h>
using namespace std;
#define oo 0x3fffffff
const int N = 1e4+10;
const int M = 1e3+10;
int n,m,k,p,l,h,x[N],y[N],dp[N][M],pre[N];
struct node{
int l,h;
}a[N];
inline int read(){
int x=0,w=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') w=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
return x*w;
}
int main(){
ios::sync_with_stdio(false);
cin.tie();cout.tie(0);
n=read(),m=read(),k=read();
for(register int i=1;i<=n;++i){
x[i]=read(),y[i]=read();
}
++n;
for(register int i=1;i<=n;++i){
a[i].l=0,a[i].h=m+1;
}
for(register int i=1;i<=k;++i){
p=read(),l=read(),h=read();
a[p+1].l=l;
a[p+1].h=h;
pre[p+1]=1;
}
for(register int i=1;i<=n;++i) pre[i]+=pre[i-1];
for(register int i=0;i<=n+1;++i){
for(register int j=0;j<=m+1;++j){
dp[i][j]=oo;
}
}
for(register int i=1;i<=m;++i) if(i<a[1].h&&i>a[1].l) dp[1][i]=0;
for(register int i=2;i<=n;++i){
for(register int j=a[i].l+1;j<a[i].h;++j){
if(j+y[i-1]<=m&&j+y[i-1]<a[i-1].h&&j+y[i-1]>a[i-1].l) dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]);
if(j==m){
if(a[i-1].h==m+1){
dp[i][j]=min(dp[i][j],dp[i-1][m]+1);
}else{
dp[i][j]=min(dp[i][j],dp[i-1][a[i-1].h-1]+((m-a[i-1].h+1)%x[i-1]==0? (m-a[i-1].h+1)/x[i-1]:(m-a[i-1].h+1)/x[i-1]+1));
}
for(register int lh=a[i-1].l+1;lh<a[i-1].h-1;++lh){
dp[i][j]=min(dp[i][j],dp[i-1][lh]+((j-lh)%x[i-1]==0? (j-lh)/x[i-1]:(j-lh)/x[i-1]+1));
}
}else{
for(register int r=1;j-r*x[i-1]>=1;++r){
if(j-r*x[i-1]>a[i-1].l&&j-r*x[i-1]<a[i-1].h) dp[i][j]=min(dp[i][j],dp[i-1][j-r*x[i-1]]+r);
}
}
}
}
int ans=oo;
for(int j=a[n].l+1;j<a[n].h;++j) ans=min(ans,dp[n][j]);
if(ans==oo){
cout<<0<<endl;
for(register int i=n;i>=1;--i){
for(register int j=1;j<=m;++j){
if(dp[i][j]!=oo){
cout<<pre[i];
return 0;
}
}
}
}else{
cout<<1<<endl<<ans;
}
return 0;
}