#include<bits/stdc++.h>
using namespace std;
struct node{
int p,l,h;
}a[100005];
struct nd{
int x,y;
}b[100005];
int dp[10005][1505];
map<int,pair<int,int> >mp;
bool cmp(node a,node b){
return a.p<b.p;
}
int nowp;
int main(){
int n,m,k;
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
cin>>b[i].x>>b[i].y;
mp[i]=make_pair(0,0x3f3f3f3f);
}
mp[n+1]=make_pair(0,0x3f3f3f3f);
for(int i=1;i<=k;i++){
cin>>a[i].p>>a[i].l>>a[i].h;
a[i].p++;
mp[a[i].p]=make_pair(a[i].l,a[i].h);
}
sort(a+1,a+k+1,cmp);
memset(dp,0x3f,sizeof(dp));
for(int i=1;i<=m;i++){
dp[1][i]=0;
}
nowp=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(j+b[i].x<mp[i+1].second&&j+b[i].x>mp[i+1].first){
dp[i+1][min(j+b[i].x,m)]=min(dp[i+1][min(j+b[i].x,m)],dp[i][j]+1);
}
}
for(int j=1;j<=m;j++){
if(j+b[i].x<mp[i+1].second&&j+b[i].x>mp[i+1].first){
dp[i+1][min(j+b[i].x,m)]=min(dp[i+1][min(j+b[i].x,m)],dp[i+1][j]+1);
}
}
for(int j=m;j>=1;j--){
if(j-b[i].y>0){
if(j-b[i].y<mp[i+1].second&&j-b[i].y>mp[i+1].first){
dp[i+1][j-b[i].y]=min(dp[i+1][j-b[i].y],dp[i][j]);
}
}
}
}
int ed=1,minn=0;
for(int i=1;i<=n+1;i++){
for(int j=1;j<=m;j++){
if(dp[i][j]!=0x3f3f3f3f){
if(i>ed){
ed=i;
minn=dp[i][j];
}
else{
minn=min(minn,dp[i][j]);
}
}
}
}
// cout<<ed<<endl;
if(ed==n+1){
cout<<1<<endl<<minn;
}
else{
cout<<0<<endl;
for(int i=1;i<=k;i++){
if(a[i].p>ed){
cout<<i-1;
return 0;
}
}
}
return 0;
}