#include <bits/stdc++.h>

using namespace std;

struct polje{
    int i,j,v;
};

int a[50010];
int b[50010];
int c[50010];
int d[50010];
int max1,max2,min1,min2;
int n,m;
vector<polje> aaaa;

bool cmp(polje a, polje b){
    if(a.i>b.i) return true;
    if(a.i==b.i) return a.j>=b.j;
    return false;
}

int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
    for(int i=1;i<=m;i++) cin>>c[i]>>d[i];
    for(int i=1;i<=n;i++){
        max1+=b[i]; min1+=a[i];
    }
    for(int i=1;i<=m;i++){
        max2+=d[i]; min2+=c[i];
    }
    cout<<min(max1,max2)<<"\n";
    int res=0;
    if(max1<=max2){
        for(int i=1;i<=n;i++){
            int sum=b[i];
            if(i%2==1){
                while(sum>0){
                    for(int j=1;j<=m;j++){
                        if(d[j]>0){
                            polje uh; uh.i=i; uh.j=j;
                            uh.v=min((int)ceil((float)sum/(m-j+1)),d[j]);
                            aaaa.push_back(uh);
                            res++;
                            sum-=uh.v;
                            d[j]-=uh.v;
                        }
                    }
                }
            }else{
                while(sum>0){
                    for(int j=m;j>=1;j--){
                        if(d[j]>0){
                            polje uh; uh.i=i; uh.j=j;
                            uh.v=min((int)ceil((float)sum/j),d[j]);
                            aaaa.push_back(uh);
                            res++;
                            sum-=uh.v;
                            d[j]-=uh.v;
                        }
                    }
                }
            }
        }
    }else{
        for(int i=1;i<=m;i++){
            int sum=d[i];
            if(i%2==1){
                while(sum>0){
                    for(int j=1;j<=n;j++){
                        if(b[j]>0){
                            polje uh; uh.i=j; uh.j=i;
                            uh.v=min((int)ceil((float)sum/(n-j+1)),b[j]);
                            aaaa.push_back(uh);
                            res++;
                            sum-=uh.v;
                            b[j]-=uh.v;
                        }
                    }
                }
            }else{
                while(sum>0){
                    for(int j=n;j>=1;j--){
                        if(b[j]>0){
                            polje uh; uh.i=j; uh.j=i;
                            uh.v=min((int)ceil((float)sum/j),b[j]);
                            aaaa.push_back(uh);
                            res++;
                            sum-=uh.v;
                            b[j]-=uh.v;
                        }
                    }
                }
            }
        }
    }
    sort(aaaa.begin(),aaaa.end(),cmp);
    vector<polje> pravores;
    for(int i=0;i<aaaa.size()-1;i++){
        if(aaaa[i].v==0){
            res--; continue;
        }
        if(aaaa[i].i==aaaa[i+1].i && aaaa[i].j==aaaa[i+1].j){
            res--;
            polje pomm; pomm.i=aaaa[i].i; pomm.j=aaaa[i].j; pomm.v=aaaa[i].v+aaaa[i+1].v;
            pravores.push_back(pomm);
        }else{
            pravores.push_back(aaaa[i]);
        }
    }
    cout<<res<<"\n";
    for(int i=0;i<res;i++){
        cout<<pravores[i].i<<" "<<pravores[i].j<<" "<<pravores[i].v<<"\n";
    }
    return 0;
}