#include<bits/stdc++.h>
using namespace std;
int x[10001],y[10001];
struct Node{
int p,l,h;
}nod[10001];
int dp[2002];
bool bj[2001];
bool cmp(Node x1,Node x2){
return x1.p<x2.p;
}
queue<int>q;
int main(){
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++){
scanf("%d%d",&x[i],&y[i]);
}
for(int i=1;i<=k;i++){
scanf("%d%d%d",&nod[i].p,&nod[i].l,&nod[i].h);
}
sort(nod+1,nod+k+1,cmp);
for(int i=1;i<=m;i++){
dp[i]=0;
bj[i]=1;
}
int tmp=0;
bool pd;
for(int i=0;i<=n;i++){
pd=0;
for(int j=1;j<=m;j++){
if(j-x[i]>=1){
if(j==m){
int js=1e9;
for(int k=m-x[i];k<=m;k++){
if(bj[k]){
js=min(js,dp[k]);
}
}
if(js!=1e9){
dp[m]=js+1;
bj[m]=1;
}
else{
q.push(m);
}
}
else if(bj[j-x[i]]&&bj[j+y[i]]&&j+y[i]<=m){
dp[j]=min(dp[j-x[i]]+1,dp[j+y[i]]);
bj[j]=1;
}
else if(bj[j-x[i]]&&(j+y[i]>m||!bj[j+y[i]])){
dp[j]=dp[j-x[i]]+1;
bj[j]=1;
}
else if(bj[j+y[i]]&&j+y[i]<=m){
dp[j]=dp[j+y[i]];
bj[j]=1;
}
else{
q.push(j);
}
}
else{
if(j==m){
int js=1e9;
for(int k=1;k<=m;k++){
if(bj[k]){
js=min(js,dp[k]);
}
}
if(js!=1e9){
dp[m]=js+1;
bj[m]=1;
}
else{
q.push(m);
}
}
else if(bj[j+y[i]]&&j+y[i]<=m){
dp[j]=dp[j+y[i]];
bj[j]=1;
}
else{
q.push(j);
}
}
if(bj[j]){
pd=1;
}
}
while(!q.empty()){
bj[q.front()]=0;
q.pop();
}
if(i==nod[tmp+1].p-1&&tmp<k){
tmp++;
for(int j=1;j<=nod[tmp].l;j++){
bj[j]=0;
}
for(int j=m;j>=nod[tmp].h;j--){
bj[j]=0;
}
}
if(!pd){
if(i==nod[tmp].p){
tmp--;
}
printf("0\n");
printf("%d",tmp);
return 0;
}
}
int ans=1e9;
for(int i=1;i<=m;i++){
if(bj[i]){
pd=1;
ans=min(ans,dp[i]);
}
}
printf("1\n");
printf("%d",ans);
return 0;
}