#include <iostream>
#include <algorithm>

using namespace std;

struct interv{
    int Min,Max;
};

int main()
{
    int n,m;
    cin>>n>>m;
    int kert[n][m];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            kert[i][j]=0;
    interv sorok[n],oszlopok[m];
    for(int i=0;i<n;i++)
        cin>>sorok[i].Min>>sorok[i].Max;
    for(int i=0;i<m;i++)
        cin>>oszlopok[i].Min>>oszlopok[i].Max;
    int ossz=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            int seged=min(sorok[i].Min, oszlopok[j].Min);
            if(oszlopok[j].Max!=0&&sorok[i].Max!=0){
            kert[i][j]=seged;
            oszlopok[j].Max-=seged;
            sorok[i].Max-=seged;
            }
            if(oszlopok[j].Max!=0&&sorok[i].Max!=0){
                seged=min(sorok[i].Max, oszlopok[j].Max);
            kert[i][j]+=seged;
            oszlopok[j].Max-=seged;
            sorok[i].Max-=seged;
            }
        }
    }
    int k=0;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(kert[i][j]!=0)
            {
                k++;
                ossz+=kert[i][j];
            }

        }
    }
    cout<<ossz<<endl;
    cout<<k<<endl;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(kert[i][j]!=0)
                cout<<i+1<<" "<<j+1<<" "<<kert[i][j]<<endl;
        }
    }
    return 0;
}