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