#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define pb push_back
#define eb emplace
#define fi first
#define se second
#define comp complex<double>
typedef pair<int,int>P;
const double esp = 1e-8;
const int maxn = 1e4 + 7;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int base = 2333;
int x[maxn], y[maxn];
int l[maxn], r[maxn];
int dp[maxn][1003];
bitset<maxn>vis;
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
r[0] = m + 1;
l[0] = 0;
for(int i = 1; i <= n; i++){
scanf("%d%d", &x[i], &y[i]);
r[i] = m + 1;
l[i] = 0;
}
memset(dp, inf, sizeof dp);
for(int i = 1; i <= m; i++)dp[0][i] = 0;
for(int i = 1; i <= k; i++){
int p;
scanf("%d", &p);
scanf("%d%d", &l[p], &r[p]);
vis[p] = 1;
}
for(int i = 1; i <= n; i++){
for(int j = l[i - 1] + 1; j < r[i - 1]; j++){
if(j + x[i] <= m)
dp[i][j + x[i]] = min(dp[i][j + x[i]], dp[i - 1][j] + 1);
else
dp[i][m] = min(dp[i][m], dp[i - 1][j] + 1);
}
for(int j = l[i - 1] + 1 + x[i]; j <= m; j++){
dp[i][j] = min(dp[i][j - x[i]] + 1, dp[i][j]);
}
for(int j = 1; j <= m; j++){
if(j + y[i] < r[i - 1] && j + y[i] > l[i - 1])
dp[i][j] = min(dp[i - 1][j + y[i]],dp[i][j]);
}
}
int ans = 0, cnt = 0;
for(int i = 1; i < n; i++){
bool flag = 0;
for(int j = l[i] + 1; j < r[i]; j++){
if(dp[i][j] < inf)
flag = 1;
}
if(!flag)break;
cnt = i;
if(vis[i]) ans++;
}
if(cnt == n - 1) {
ans = inf;
for(int i = 1; i <= m ; i++){
ans = min(ans, dp[n - 1][i]);
}
printf("1\n%d\n",ans);
}
else printf("0\n%d\n", ans);
return 0;
}
调了一上午了,qwq。