#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
using namespace std;
typedef unsigned long long ll;
template <typename T>
inline void read(T&x){
int w=0;x=0;
char ch = getchar();
while(ch<'0'||ch>'9'){
if(ch=='-') w=1;
ch = getchar();
}
while(ch>='0'&&ch<='9'){
x = (x<<1)+(x<<3)+(ch^48);
ch = getchar();
}
if(w) x=-x;
}
template <typename T,typename...Args>
inline void read(T&t,Args&...args){
read(t);read(args...);
}
const int N = 1e4+10,M = 1e3+10,INF = 0x3f3f3f3f;
int n,m,k;
struct{
int x,y,vis;
}guan[N],niao[N];
int dp[N][M+M],ans=INF;
int main(){
read(n,m,k);
for(int i=1;i<=n;++i) read(niao[i].x,niao[i].y);
for(int i=1,p;i<=k;++i){
read(p);read(guan[p].x,guan[p].y);
guan[p].vis = 1;
}
memset(dp,INF,sizeof(dp));
for(int i=1;i<=m;++i) dp[0][i]=0;
for(int i=1;i<=n;++i){
for(int j=niao[i].x+1;j<=niao[i].x+m;++j) dp[i][j] = min(dp[i-1][j-niao[i].x],dp[i][j-niao[i].x])+1;
for(int j=m+1;j<=niao[i].x+m;++j) dp[i][m] = min(dp[i][m],dp[i][j]);
for(int j=1;j<=m-niao[i].y;++j) dp[i][j] = min(dp[i][j],dp[i-1][j+niao[i].y]);
if(guan[i].vis){
for(int j=1;j<=guan[i].x;++j) dp[i][j]=INF;
for(int j=guan[i].y;j<=m;++j) dp[i][j]=INF;
}
}
for(int j=1;j<=m;++j) ans = min(ans,dp[n][j]);
if(ans<INF) printf("1\n%d",ans);
else{
ans = 0;
for(int i=1;i<n;++i){
if(guan[i].vis){
int f = 1;
for(int j=guan[i].x+1;j<guan[i].y;++j){
if(dp[i][j]!=INF){
++ans;
f = 0;
break;
}
}
if(f) break;
}
}
printf("0\n%d",ans);
}
return 0;
}