#include <iostream>
#include <map>
#include <vector>

using namespace std;

struct granica{
    long long d;
    long long g;
};

map <long long,long long> krompiri;
granica a[50005];
granica b[50005];
vector <long long> kljucevi;
long long m,n;

long long minimum(long long a,long long b){
    if(a<b){
        return a;
    }
    else{
        return b;
    }
}

int main()
{
    cin>>n>>m;
    long long i;
    long long dk=0;
    for(i=0;i<n;i++){
        cin>>a[i].d>>a[i].g;
    }
    for(i=0;i<m;i++){
        cin>>b[i].d>>b[i].g;
    }
    long long j;
    long long p;
    for(j=0;j<m;j++){
        i=0;
        while(b[j].d>0 && i<n){
            if((a[i].d)<=(b[j].d) && (a[i].d)>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(a[i].d);
                (a[i].g)-=(a[i].d);
                (b[j].d)-=(a[i].d);
                (b[j].g)-=(a[i].d);
                (a[i].d)=0;
            }
            else if(a[i].d>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(b[j].d);
                (a[i].g)-=(b[j].d);
                (a[i].d)-=(b[j].d);
                (b[j].g)-=(b[j].d);
                (b[j].d)=0;
            }
            i++;
        }
        i=0;
        while(b[j].d>0){
            if((a[i].g)<=(b[j].d) && (a[i].g)>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(a[i].g);
                (b[j].d)-=(a[i].g);
                (b[j].g)-=(a[i].g);
                (a[i].g)=0;
            }
            else if(a[i].g>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(b[j].d);
                (a[i].g)-=(b[j].d);
                (b[j].g)-=(b[j].d);
                (b[j].d)=0;
            }
            i++;
        }
    }

    for(i=0;i<n;i++){
        j=0;
        while(a[i].d>0 && j<m){
            if((b[j].d)<=(a[i].d) && (b[j].d)>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(b[j].d);
                (b[j].g)-=(b[j].d);
                (a[i].d)-=(b[j].d);
                (a[i].g)-=(b[j].d);
                (b[j].d)=0;
            }
            else if(b[j].d>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(a[i].d);
                (b[j].g)-=(a[i].d);
                (b[j].d)-=(a[i].d);
                (a[i].g)-=(a[i].d);
                (a[i].d)=0;
            }
            j++;
        }
        j=0;
        while(a[i].d>0){
            if((b[j].g)<=(a[i].d) && (b[j].g)>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(b[j].g);
                (a[i].d)-=(b[j].g);
                (a[i].g)-=(b[j].g);
                (b[j].g)=0;
            }
            else if(b[j].g>0){
                p=i*m+j;
                if(krompiri[p]==0){
                    kljucevi.push_back(p);
                    dk++;
                }
                krompiri[p]+=(a[i].d);
                (b[j].g)-=(a[i].d);
                (a[i].g)-=(a[i].d);
                (a[i].d)=0;
            }
            j++;
        }
    }

    long long k;
    long long zbir=0;
    long long minn;
    for(k=0;k<dk;k++){
        i=(kljucevi[k])/m;
        j=(kljucevi[k])%m;
        if(a[i].g>0 && b[j].g>0){
            minn=minimum(a[i].g,b[i].g);
            krompiri[(kljucevi[k])]+=minn;
            a[i].g-=minn;
            b[i].g-=minn;
        }
        zbir+=krompiri[(kljucevi[k])];
    }
    cout<<zbir<<endl;
    cout<<dk<<endl;
    for(k=0;k<dk;k++){
        i=(kljucevi[k])/m;
        j=(kljucevi[k])%m;
        cout<<i+1<<" "<<j+1<<" "<<krompiri[(kljucevi[k])]<<endl;
    }
    return 0;
}