#include <iostream>

using namespace std;

typedef struct{
    int maxi;
    int mini;
}Matrica;

int main()
{
    int n, m, br=0, brm=0, bra=0, brb=0, brc=0, brd=0;
    cin >> n >> m;
    Matrica r[100], k[100];
    for(int i=0; i<n; i++){
        cin >> r[i].mini >> r[i].maxi;
        bra+=r[i].mini;
        brb+=r[i].maxi;
    }
    for(int j=0; j<m; j++){
        cin >> k[j].mini >> k[j].maxi;
        brc+=k[j].mini;
        brd+=k[j].maxi;
    }
    int mat[100][100];

    if(n==1){
        for(int j=0; j<m; j++){
            mat[0][j]=k[j].mini;
            r[0].mini-=k[j].mini;
            r[0].maxi-=k[j].mini;
            k[j].maxi-=k[j].mini;
            k[j].mini=0;
            br+=mat[0][j];
        }
        for(int j=0; j<m; j++){
            if(r[0].maxi>0 && k[j].maxi>0){
                if(k[j].maxi>=r[0].maxi){
                    mat[0][j]+=r[0].maxi;
                    k[j].maxi-=r[0].maxi;
                    br+=r[0].maxi;
                    r[0].maxi=0;
                    break;
                }
                else{
                    mat[0][j]+=k[j].maxi;
                    r[0].maxi-=k[j].maxi;
                    br+=k[j].maxi;
                    k[j].maxi=0;
                }
            }
        }
        for(int j=0; j<m; j++){
            if(mat[0][j]==0){
                brm++;
            }
        }
        cout << br << endl;
        cout << m-brm << endl;
        for(int j=0; j<m; j++){
            if(mat[0][j]!=0){
                cout << 1 << " " << j+1 << " " << mat[0][j] << endl;
            }
        }
        return 0;
    }
    else if(bra==0 && brc==0){
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                mat[i][j]=0;
                if(r[i].maxi>0 && k[j].maxi>0){
                    if(k[j].maxi>=r[i].maxi){
                        mat[i][j]+=r[i].maxi;
                        k[j].maxi-=r[i].maxi;
                        br+=r[i].maxi;
                        r[i].maxi=0;
                        break;
                    }
                    else{
                        mat[i][j]+=k[j].maxi;
                        r[i].maxi-=k[j].maxi;
                        br+=k[j].maxi;
                        k[j].maxi=0;
                    }
                }
            }
        }
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(mat[i][j]==0){
                    brm++;
                }
            }
        }
        cout << br << endl;
        cout << m*n-brm << endl;
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(mat[i][j]!=0){
                    cout << i+1 << " " << j+1 << " " << mat[i][j] << endl;
                }
            }
        }
        return 0;
    }
    else if(bra==brb){
        if(brc==brd){
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    mat[i][j]=0;
                    if(r[i].maxi>0 && k[j].maxi>0){
                        if(k[j].maxi>=r[i].maxi){
                            mat[i][j]+=r[i].maxi;
                            k[j].maxi-=r[i].maxi;
                            br+=r[i].maxi;
                            r[i].maxi=0;
                            break;
                        }
                        else{
                            mat[i][j]+=k[j].maxi;
                            r[i].maxi-=k[j].maxi;
                            br+=k[j].maxi;
                            k[j].maxi=0;
                        }
                    }
                }
            }
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    if(mat[i][j]==0){
                        brm++;
                    }
                }
            }
            cout << br << endl;
            cout << m*n-brm << endl;
            for(int i=0; i<n; i++){
                for(int j=0; j<m; j++){
                    if(mat[i][j]!=0){
                        cout << i+1 << " " << j+1 << " " << mat[i][j] << endl;
                    }
                }
            }
            return 0;

        }
    }
    else{
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                mat[i][j]=0;
                if(r[i].maxi>0 && k[j].maxi>0){
                    if(k[j].maxi>=r[i].maxi){
                        mat[i][j]+=r[i].maxi;
                        k[j].maxi-=r[i].maxi;
                        br+=r[i].maxi;
                        r[i].maxi=0;
                        break;
                    }
                    else{
                        mat[i][j]+=k[j].maxi;
                        r[i].maxi-=k[j].maxi;
                        br+=k[j].maxi;
                        k[j].maxi=0;
                    }
                }
            }
        }
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(mat[i][j]==0){
                    brm++;
                }
            }
        }
        cout << br << endl;
        cout << m*n-brm << endl;
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(mat[i][j]!=0){
                    cout << i+1 << " " << j+1 << " " << mat[i][j] << endl;
                }
            }
        }
        return 0;
    }
    return 0;
}