#include <bits/stdc++.h>
# define endl            '\n'
# define clr(x,a)        memset(x,a,sizeof(x))
# define vi              vector<int>
# define all(a)          a.begin(), a.end()
# define deb(x)          cout<<#x<<"=="<<x<<endl;
# define pb              push_back
# define sc              scanf
# define pr              printf
# define tc              int t; cin>>t; while(t--)
# define rev(s)          reverse(s.begin(),s.end())
# define linija          cout<<"___________\n";
using namespace std;
typedef long long ll;
const int mxN=50005, mxM=200005, LOG=25, inf=1e8;
const ll mod=998244353;
template<typename T> T nzd(T a, T b){if(b==0) return a;else return nzd(b, a%b);}
template<typename T> T nzs(T a, T b){return(a*(b/nzd(a,b)));}
template<typename T> T stepenuj(T e, T n){T x=1,p=e;while(n){if(n&1)x=(x*p)%mod;p=(p*p)%mod;n>>=1;}return x;}
template<typename T> inline T na2(T x){return x*x;}
int n, m, a[mxN], b[mxN], c[mxN], d[mxN], br;
ll suma;
struct polje{
   int r, c, n;
}niz[1000006];

int main(){
   #ifndef ONLINE_JUDGE
      freopen("in.txt", "r", stdin);
   #endif // ONLINE_JUDGE
   sc("%d %d", &n, &m);
   for(int i = 1; i <= n; i++){
      sc("%d %d", &a[i], &b[i]);
   }
   for(int i = 1; i <= m; i++){
      sc("%d %d", &c[i], &d[i]);
   }
   int v;
   for(int i = 1; i <= n; i++){
      for(int j = 1; j <= m; j++){
         v = max( min(b[i], d[j]), max(a[i], c[j]) );
         if(v <= 0) break;
         a[i] -= v;
         b[i] -= v;
         c[j] -= v;
         d[j] -= v;
         br++;
         niz[br].r = i;
         niz[br].c = j;
         niz[br].n = v;
         suma += v;
      }
   }

   pr("%lld\n", suma);
   pr("%d\n", br);
   for(int i = 1; i <= br; i++){
      pr("%d %d %d\n", niz[i].r, niz[i].c, niz[i].n);
   }


	return 0;
}