#include <bits/stdc++.h>
using namespace std;
long long n, m, k, up[10005], dn[10005], h1[10005], h2[10005], f[10005][1005], jd[10005], ans = 0x3f3f3f3f;
int main()
{
cin >> n >> m >> k;
for (int i = 0; i < n; i++)
cin >> up[i] >> dn[i];
for (int i = 0; i <= n; i++)
{
h1[i] = 1;
h2[i] = m;
}
for (int i = 1; i <= k; i++)
{
int x, y, z;
cin >> x >> y >> z;
h1[x] = y+1;
h2[x] = z-1;
jd[x] = 1;
}
for (int i = 1; i <= n; i++)
jd[i] += jd[i-1];
memset(f, 0x3f, sizeof(f));
for (int i = 0; i <= m; i++)
f[0][i] = 0;
int l = 1, h = m;
for (int i = 1; i <= n; i++)
{
bool ok = 0;
for (int j = h1[i]; j <= h2[i]; j++)
{
if (j == m)
for (int k = m-up[i-1]; k < m; k++)
f[i][m] = min(min(f[i][m], f[i][k]+1), f[i-1][k]+1);
else if (up[i-1] + l <= j)
f[i][j] = min(min(f[i][j], f[i][j-up[i-1]]+1), f[i-1][j-up[i-1]]+1);
if (f[i][j] < 0x3f3f3f3f)
ok = 1;
}
for (int j = h1[i]; j <= h2[i]; j++)
if (h - dn[i-1] >= j)
{
f[i][j] = min(f[i][j], f[i-1][j+dn[i-1]]);
if (f[i][j] < 0x3f3f3f3f)
ok = 1;
}
if (ok == 0)
{
cout << 0 << "\n" << jd[i-1];
return 0;
}
for (int j = h1[i]; j <= h2[i]; j++)
if (f[i][j] < 0x3f3f3f3f)
{
l = j;
break;
}
for (int j = h2[i]; j >= h1[i]; j--)
if (f[i][j] < 0x3f3f3f3f)
{
h = j;
break;
}
}l和h记录前一列可能的范围
for (int i = 1; i <= m; i++)
ans = min(ans, f[n][i]);
cout << 1 << "\n" << ans;
return 0;
}