#include<iostream>
using namespace std;
const int N = 1e4 + 10, M = 1e3 + 10;
int n, m, k, x[N], y[N], p, l[N], h[N], cnt[N], f[M][2], g[M][2], ans = 1e9;
int read_int(){
int x = 0; char ch = ' '; while(!isdigit(ch)) ch = getchar();
while(isdigit(ch)) {x = x * 10 + ch - '0'; ch = getchar();} return x;
}
int main(){
n = read_int(); m = read_int(); k = read_int();
for(int i = 0; i < n; i++) l[i] = 0, h[i] = m + 1;
for(int i = 0; i < n; i++) {x[i] = read_int(); y[i] = read_int();}
for(int i = 0; i < k; i++) {p = read_int(); cnt[p]++; l[p] = read_int(); h[p] = read_int();}
for(int i = 1; i < n; i++) cnt[i] += cnt[i-1];
for(int i = 0; i <= m; i++) f[i][0] = true;
for(int i = 0; i < n; i++){
bool flag = true;
for(int j = 0; j <= m; j++) f[j][(i+1)%2] = false, g[j][(i+1)%2] = 1e9;
for(int j = l[i]+1; j <= h[i]-1; j++){
if(f[j][i%2]){
flag = false;
int c = 1;
for(int o = j + x[i]; o < h[i+1]; o += x[i]){
f[o][(i+1)%2] = true;
g[o][(i+1)%2] = min(g[j][i%2] + c, g[o][(i+1)%2]);
c++;
}
f[m][(i+1)%2] = true;
g[m][(i+1)%2] = min(g[j][i%2] + c, g[m][(i+1)%2]);
if(j-y[i] > 0) f[j-y[i]][(i+1)%2] = true, g[j-y[i]][(i+1)%2] = min(g[j][i%2], g[j-y[i]][(i+1)%2]);
}
}
if(flag) {cout << 0 << '\n' << cnt[i-1]; return 0;}
}
cout << 1 << '\n';
for(int i = 0; i <= m; i++) ans = min(ans, g[i][n%2]);
cout << ans;
return 0;
}