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

int main()
{
    /*ios_base::sync_with_stdio(false);
    cin.tie(NULL);*/



    int n,m;
    vector<tuple<int,int,int>> a;
    cin>>n>>m;
    vector<tuple<int, int, int>> ro;
    for(int i=0;i<n;i++)
    {
        int l,r;
        cin>>l>>r;
        ro.push_back(make_tuple(r,l,i));
    }
    sort(ro.begin(), ro.end());
    vector<pair<int, int>> ko(m);
    for(int i=0;i<m;i++)
        cin>>ko[i].first>>ko[i].second;
    int br=0;

    for(int i=0;i<m;i++)
    {
        int j=0;
        int t=ko[i].first;
        while(t>0 && j<n)
        {
            if(get<0>(ro[j])<=t)
            {
                t-=get<0>(ro[j]);
                //a[get<2>(ro[j])][i]+=get<0>(ro[j]);
                if(get<0>(ro[j]))
                a.push_back(make_tuple(get<2>(ro[j]), i, get<0>(ro[j])));
                br+=get<0>(ro[j]);
                get<0>(ro[j])=0;
            }
            else
            {
                get<0>(ro[j])-=t;
                //a[get<2>(ro[j])][i]+=t;
                if(t)
                a.push_back(make_tuple(get<2>(ro[j]), i, t));
                br+=t;
                t=0;
            }
            j++;
        }
    }
    for(int i=0;i<m;i++)
    {
        int j=0;
        int t=ko[i].second-ko[i].first;
        while(t>0 && j<n)
        {
            if(get<0>(ro[j])<=t)
            {
                t-=get<0>(ro[j]);

                bool fnd=false;
                for(auto &z:a)
                {
                    if(get<0>(z)==get<2>(ro[j]) && get<1>(z)==i)
                    {
                        get<2>(z)+=get<0>(ro[j]);
                        fnd=true;
                        break;
                    }
                }
                if(!fnd && get<0>(ro[j]))
                    a.push_back(make_tuple(get<2>(ro[j]), i, get<0>(ro[j])));
                br+=get<0>(ro[j]);
                get<0>(ro[j])=0;
            }
            else
            {
                get<0>(ro[j])-=t;

                bool fnd=false;
                for(auto &z:a)
                {
                    if(get<0>(z)==get<2>(ro[j]) && get<1>(z)==i)
                    {
                        get<2>(z)+=t;
                        fnd=true;
                        break;
                    }
                }
                if(!fnd && t)
                    a.push_back(make_tuple(get<2>(ro[j]), i, t));
                br+=t;
                t=0;
            }
            j++;
        }
    }
    /*int k=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(a[i][j])
                k++;
    cout<<br<<'\n'<<k<<'\n';

    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            if(a[i][j])
                cout<<i+1<<' '<<j+1<<' '<<a[i][j]<<'\n';*/
    cout<<br<<'\n'<<a.size()<<'\n';
    for(auto z:a)
    {
        cout<<get<0>(z)+1<<' '<<get<1>(z)+1<<' '<<get<2>(z)<<'\n';
    }

    return 0;
}