#include <bits/stdc++.h>

using namespace std;
    int niz1[50000][2];
    int niz2[50000][2];
    bool red[50000];
    bool kolona[50000];

    vector<pair<pair<int,int>,int>> resenja;
    vector<pair<pair<int,int>,int>> prava_resenja;
    int random;
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);



    int n,m;
    cin >> n;
    cin >> m;
    int rmini=0,rmaxi=0;
    int kmini=0,kmaxi=0;
    for (int i=0;i<n;i++){
        cin >> niz1[i][0];
        cin >> niz1[i][1];
        rmini+=niz1[i][0];
        rmaxi+=niz1[i][1];
    }
    int k = 0;
    long long int broj = 0;


    for(int j = 0 ; j < m; j++){
        cin >> niz2[j][0];
        cin >> niz2[j][1];
        kmini+=niz2[j][0];
        kmaxi+=niz2[j][1];

        for(int i = 0;i < n; i++){
                if(red[i]){
                    continue;
                }
                if(kolona[j]){
                    break;
                }
                int pom = min(niz1[i][1],niz2[j][1]);
                int pom2 =max(niz1[i][0],niz2[j][0]);
                if(pom == 0){
                    continue;
                }
                if(pom2 > pom){
            resenja.push_back({{i,j},pom});
            k++;
            niz1[i][0]-=pom;
            niz1[i][1]-=pom;
            niz2[j][0]-=pom;
            niz2[j][1]-=pom;
            if (niz1[i][1]==0 || niz1[i][0] == 0)
                red[i] = true;
            if (niz2[j][1]==0 || niz2[j][0] == 0)
                kolona[j] = true;
                broj+=pom;
                   }else{
            resenja.push_back({{i,j},pom2});
            k++;
            niz1[i][0]-=pom2;
            niz1[i][1]-=pom2;
            niz2[j][0]-=pom2;
            niz2[j][1]-=pom2;
            if (niz1[i][1]==0 || niz1[i][0] == 0)
                red[i] = true;
            if (niz2[j][1]==0 || niz2[j][0] == 0)
                kolona[j] = true;
                broj+=pom2;
                   }

        }
    }

    cout << min(rmaxi,kmaxi) << endl << k << endl;

    for (int i = 0 ; i < k ; i ++){
    int pi=resenja[i].first.first;
    int pj=resenja[i].first.second;
    int pom = min(niz1[pi][1],niz2[pj][1]);
    if(pom >0){
        niz1[pi][1]-=pom;
        niz2[pj][1]-=pom;

        cout << pi + 1 << " "<< pj + 1<< " " << resenja[i].second + pom<< endl;

    }else{
        cout << pi + 1 << " "<< pj + 1<< " " << resenja[i].second << endl;
    }
    }

    return 0;
}