#include <iostream>
using namespace std;
#include <queue>
int main()
{
    int N,M;
    cin >> N >> M;
    int Matrica[N][M];
    for(int i=0;i<N;i++){for(int j=0;j<M;j++){
    Matrica[i][j] = 0; 
        }
    }
    int niz_N[N][2]; // najmanji, najveci
    int niz_M[M][2]; // najmanji, najveci
     priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> prioritet_N;
     priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> prioritet_M; 
    for(int i = 0; i < N; i++){
        cin >> niz_N[i][0] >> niz_N[i][1];
        prioritet_N.push(make_pair(niz_N[i][1], i));
    }
    for(int i = 0; i < M; i++){
        cin >> niz_M[i][0] >> niz_M[i][1];
        prioritet_M.push(make_pair(niz_M[i][1] , i));
    }
    int najmanji;
    while(prioritet_N.top().first == 0 && prioritet_N.empty() == false){prioritet_N.pop();}
    while(prioritet_M.top().first == 0 && prioritet_N.empty() == false){prioritet_M.pop();}
    while(prioritet_M.empty() != true && prioritet_N.empty() != true){
        while(prioritet_N.top().first == 0 && prioritet_N.empty() == false){prioritet_N.pop();}
        while(prioritet_M.top().first == 0 && prioritet_N.empty() == false){prioritet_M.pop();}
        najmanji = min(prioritet_M.top().first,prioritet_N.top().first);
        Matrica[prioritet_N.top().second][prioritet_M.top().second] += najmanji;
        prioritet_N.push(make_pair(prioritet_N.top().first - najmanji, prioritet_N.top().second));
        prioritet_M.push(make_pair(prioritet_M.top().first - najmanji, prioritet_M.top().second));
        prioritet_M.pop();
        prioritet_N.pop();
        if(prioritet_N.top().first == 0){prioritet_N.pop();}
        if(prioritet_M.top().first == 0){prioritet_M.pop();}
    }
    for(int i=0;i<N;i++){for(int j=0;j<M;j++){
      cout << Matrica[i][j] << " ";  
    } cout << endl;}
    
    
}