#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
****************************************************************/