#include<iostream>
#include<algorithm>
#include<cstring>
#define x first
#define y second
using namespace std;
const int N = 10010 , M = 3010;
typedef pair<int,int> PII;
int n , m , k;
PII bird[N] , pipe[N];
int f[N][M]; // 表示经过(i , j)所需要的最小点击数
int main()
{
cin >> n >> m >> k;
for(int i = 1 ; i <= n ; i ++)
{
int x , y;
cin >> x >> y;
bird[i] = {x , y};
}
for(int i = 1 ; i <= k ; i ++)
{
int p , l , h;
cin >> p >> l >> h;
pipe[p] = {l , h};
}
memset(f , 0x3f , sizeof f);
for(int i = 1 ; i <= m ; i ++) f[0][i] = 0; //从起点任意高度出发
for(int i = 1 ; i <= n ; i ++)
{
int add = bird[i].x , sub = bird[i].y;
if(pipe[i].y)
{
for(int j = pipe[i].x + 1 ; j < pipe[i].y ; j ++)
{
if(j + sub <= m) f[i][j] = min(f[i - 1][j + sub] , f[i][j]);
if(j - add > 0)
{
f[i][j] = min(f[i][j] , f[i][j - add] + 1);
f[i][j] = min(f[i][j] , f[i - 1][j - add] + 1);
}
}
}
else
{
for(int j = 1 ; j <= m + add ; j ++)
{
if(j + sub <= m) f[i][j] = min(f[i - 1][j + sub] , f[i][j]);
if(j - add > 0)
{
f[i][min(j , m)] = min(f[i][min(j , m)] , f[i - 1][j - add] + 1);
f[i][min(j , m)] = min(f[i][min(j , m)] , f[i][j - add] + 1);
}
}
}
}
int x = 0;
for(int i = 1 ; i <= n ; i ++)
for(int j = 1 ; j <= m ; j ++)
if(f[i][j] != 0x3f3f3f3f)
{
x = max(x , i);
break;
}
if(x == n)
{
int minv = 0x3f3f3f3f;
for(int i = 1 ; i <= m ; i ++) minv = min(minv , f[n][i]);
cout << "1" << endl;
cout << minv << endl;
}
else
{
cout << "0" << endl;
int sum = 0;
for(int i = 1 ; i <= x ; i ++) if(pipe[i].y) sum ++;
cout << sum << endl;
}
return 0;
}