#include<bits/stdc++.h>
using namespace std;

const int N = 10010, M = 1010, INF = 0x3f3f3f3f;

int up[N], down[N], l[N], r[N];
int f[N][M];


int main()
{
    int n, m, k;
    cin >> n >> m >> k;
    for(int i = 0; i < n; i++)
        cin >> up[i] >> down[i];
    for(int i = 1; i <= n; i++) l[i] = 0, r[i] = m + 1;

    for(int i = 1; i <= k; i++)
    {
        int x;
        cin >> x;
        cin >> l[x] >> r[x];
    }
    f[0][0] = INF;
    for(int i = 1; i <= n; i++)
        for(int j = 0; j <= m; j++)
            f[i][j] = INF;

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= m; j++)
        {
            if(j >= up[i - 1])
            {
                //点一次
                f[i][j] = min(f[i][j], f[i - 1][j - up[i - 1]] + 1);
                //点非一次
                f[i][j] = min(f[i][j], f[i][j - up[i - 1]] + 1);
            }
            if(j == m)
            {
                for(int k = j - up[i - 1]; k <= m; k++)
                {
                    f[i][j] = min(f[i][j], f[i - 1][k] + 1);
                    f[i][j] = min(f[i][j], f[i][k] + 1);
                }
            }
        }
        for(int j = 1; j <= m; j++)
        {
            if(j + down[i - 1] <= m)
                f[i][j] = min(f[i][j], f[i - 1][j + down[i - 1]]);
        }
        for(int j = 0; j <= l[i]; j++) f[i][j] = INF;
        for(int j = r[i]; j <= m; j++) f[i][j] = INF;
    }

    int ans1 = INF;
    for(int i = 1; i <= m; i++) ans1 = min(ans1, f[n][i]);

    if(ans1 < INF)
    {
        cout << 1 << endl << ans1 << endl;
        return 0;
    }

    int last = 1;
    for(int i = 1; i <= n; i++)
    {
        bool ok = false;
        for(int j = 1; j <= m; j++) 
            if(f[i][j] < INF) ok = 1;
        
        if(ok == false)
        {
            last = i;
            break;
        }
    }

    int ans2 = 0;
    for(int i = 1; i < last; i++)
        if(l[i] > 0 or r[i] <= m)
            ++ ans2;
    
    cout << 0 << endl << ans2;
    return 0;
}

/*
状态表示: f[i][j] : 到第i列高度为j的最小点击数
枚举第i-1列点k次屏幕 f[i - 1][j - k*up[i - 1]] + k;

f[i][j] = min(f[i][j], f[i - 1][j - up[i - 1]] + 1);
f[i][j] = min(f[i][j], f[i][j - up[i - 1]] + 1);

*/

0 条评论

目前还没有评论...