#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int INF = 1000000000;
const int MaxN = 10000;
const int MaxM = 1000;
template <class T>
inline void tension(T &a, const T &b)
{
if (b < a)
a = b;
}
int main()
{
//freopen("bird.in", "r", stdin);
//freopen("bird.out", "w", stdout);
int n, m, nP;
static int ju[MaxN], jd[MaxN];
static bool hasP[MaxN];
static int pl[MaxN], ph[MaxN];
cin >> n >> m >> nP;
for (int i = 0; i < n; i++)
scanf("%d %d", &ju[i], &jd[i]);
for (int x = 0; x < n; x++)
pl[x] = 0, ph[x] = m + 1;
for (int i = 0; i < nP; i++)
{
int x;
scanf("%d", &x);
hasP[x] = true;
scanf("%d %d", &pl[x], &ph[x]);
}
static int f[MaxN + 1][MaxM + 1];
for (int j = 1; j <= m; j++)
f[0][j] = 0;
for (int i = 0; i < n; i++)
{
for (int j = 1; j <= m; j++)
f[i + 1][j] = INF;
bool cont = false;
for (int j = 1; j <= pl[i]; j++)
f[i][j] = INF;
for (int j = ph[i]; j <= m; j++)
f[i][j] = INF;
for (int j = 1; j <= m; j++)
if (f[i][j] != INF)
{
cont = true;
tension(f[i + 1][min(j + ju[i], m)], f[i][j] + 1);
}
for (int j = 1; j <= m; j++)
if (f[i + 1][j] != INF)
tension(f[i + 1][min(j + ju[i], m)], f[i + 1][j] + 1);
for (int j = jd[i] + 1; j <= m; j++)
tension(f[i + 1][j - jd[i]], f[i][j]);
if (!cont)
{
int res = 0;
for (int k = 0; k < i; k++)
if (hasP[k])
res++;
cout << 0 << endl;
cout << res << endl;
return 0;
}
}
cout << 1 << endl;
cout << *min_element(f[n] + 1, f[n] + m + 1) << endl;
return 0;
}
/**************************************************************
Problem: 2336
User: admin
Language: C++
Result: Accepted
Time:399 ms
Memory:41348 kb
****************************************************************/