#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
const int M=1e3+10;
int n,m,k;
int x[N],y[N];
struct node{
int p,l,h;
}guan[N];
int be[M],now[M];
bool cmp(node a,node b){
return a.p<b.p;
}
struct edge{
bool you;
int wei;
}tong[N];
int main(){
cin>>n>>m>>k;
memset(now,0x3f,sizeof now);
memset(be,0,sizeof be);
for(int i=1;i<n;i++){
cin>>x[i]>>y[i];
}
for(int i=1;i<=k;i++){
cin>>guan[i].p>>guan[i].l>>guan[i].h;
}
sort(guan+1,guan+k+1,cmp);
for(int i=1;i<=k;i++){
tong[guan[i].p].you=1;
tong[guan[i].p].wei=i;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=0;;k++){
if(tong[i].you){
if(j>guan[tong[i].wei].h&&j<guan[tong[i].wei].l){
if(j-k*x[i-1]<0&&k!=0){
break;
}
if(j+y[i-1]>m&&k==0){
continue;
}
if(k==0){
now[j]=min(now[j],be[j+y[i-1]]);
}else{
now[j]=min(now[j],be[j-k*x[i-1]]+k);
}
}
}
}
}
for(int i=1;i<=m;i++){
be[i]=now[i];
now[i]=0x3f3f3f3f;
}
}
int minn=0x3f3f3f3f-1;
for(int i=1;i<=n;i++){
minn=min(minn,be[i]);
}
if(minn==0x3f3f3f3f-1){
cout<<0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
}
}
}else{
cout<<1<<endl<<minn<<endl;
}
return 0;
}