#include <iostream>
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

struct tri{
	long long x, y, br;
};

int main(int argc, char** argv) {
	ios_base::sync_with_stdio(false);
	long long n,m;
	cin>>n>>m;
	long long imin[n],imax[n],jmin[m],jmax[m], i;
	vector<tri> res;
	for(long long i=0;i<n;i++){
		cin>>imin[i]>>imax[i];
	}
	for(long long i=0;i<m;i++){
		cin>>jmin[i]>>jmax[i];
	}
	if(n!=1){
		long long zred[n], zkol[m];
		for(long long i=0;i<n;i++){
			zred[i]=0;
		}
		for(long long i=0;i<m;i++){
			zkol[i]=0;
		}
		long long kon=0;
		for(long long i=0;i<n;i++){
			for(long long j=0;j<m;j++){
				long long k=min((imax[i]-zred[i]),(jmax[j]-zkol[j]));
				tri pom;
				if(k>0){
					kon+=k;
					pom.x=i;
					pom.y=j;
					pom.br=k;
					res.push_back(pom);
					zred[i]+=k;
					zkol[j]+=k;
				}
				
			}
		}
		cout<<kon<<endl;
		cout<<res.size()<<endl;
		for(long long i=0;i<res.size();i++){
			cout<<res[i].x+1<<" "<<res[i].y+1<<" "<<res[i].br<<endl;
		}
	}
	else{
		//cout<<"srvdf";
		long long brk=0;
		vector<long long> prim;
		long long i;
		for(i=0;i<m;i++){
			prim.push_back(jmin[i]);
			brk+=jmin[i];
			//zred[0]+=jmin[i];
		}
		long long ostalo = imax[0]-brk;
		//cout<<ostalo<<endl;
		for(i=0;i<m;i++){
			if(ostalo<=0){
				break;
			}
			else{
				long long raz=(jmax[i]-jmin[i]);
				long long mini;
				if(raz<ostalo){
					mini=raz;
				}
				else{
					mini=ostalo;
				}
				prim[i]+= mini;
				ostalo-=mini;
				
			}
		}
		long long brojkromp=0, brojkor=0;
		for(i=0;i<m;i++){
			brojkromp+=prim[i];
			if(prim[i]>0){
				brojkor++;
			}
		}
		cout<<brojkromp<<endl<<brojkor<<endl;
		for(i=0;i<m;i++){
			if(prim[i]>0){
				cout<<"1 "<<i+1<<" "<<prim[i]<<endl;
			}
		}
	}
	return 0;
}
/*
2 3
2 2
2 2
1 2
1 2
1 2

2 3
1 4
1 6
1 2
1 5
1 1

1 5
5 9
1 4
0 2
1 5
2 3
1 1
*/