#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<stack>
#include<cmath>
#include<algorithm>
#include<vector>
#include<stdlib.h>
using namespace std;
int n,p,u,v,w;
int g[105][105];
struct node{
int c,u;
int sum;
}a[105];
int en[105];
int ex[105];
queue<int> q;
int main(){
memset(g,0x3f,sizeof(g));
cin>>n>>p;
for(int i=1;i<=n;i++){
cin>>a[i].c>>a[i].u;
}
for(int i=1;i<=p;i++){
cin>>u>>v>>w;
g[u][v]=w;
en[v]++;
ex[u]++;
}
for(int i=1;i<=n;i++){
if(en[i]==0){
q.push(i);
}
}
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=1;i<=n;i++){
if(g[x][i]!=0x3f3f3f3f){
if(a[x].c>0){
a[i].sum+=g[x][i]*a[x].c;
en[i]--;
if(en[i]==0){
q.push(i);
a[i].c=a[i].sum-a[i].u;
}
}
}
}
}
bool ck=0;
for(int i=1;i<=n;i++){
if(ex[i]==0&&a[i].c>0){
ck=1;
cout<<i<<" "<<a[i].c;
}
}
if(ck==0){
cout<<"NULL";
}
return 0;
}