#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int maxn=110;
const int maxm=210;
int head[maxn],vis[maxn];
int to[maxm],nxt[maxm],w[maxm];
int u[maxn],c[maxn],ind[maxn],outd[maxn];
int num,n,p;
bool f;
void add(int u,int v,int val){
to[++num]=v;
nxt[num]=head[u];
head[u]=num;
w[num]=val;
}
queue<int>q;
void topsort(){
while(q.size()){
int x=q.front();
q.pop();
for(int i=head[x];i;i=nxt[i]){
int y=to[i];
ind[y]--;
if(c[x]>0) c[y]+=w[i]*c[x];
if(ind[y]==0){
q.push(y);
c[y]-=u[y];
}
}
}
}
int main(){
scanf("%d%d",&n,&p);
for(int i=1;i<=n;i++){
scanf("%d%d",&c[i],&u[i]);
if(c[i]>0) q.push(i);
}
int x,y,val;
for(int i=1;i<=p;i++){
scanf("%d%d%d",&x,&y,&val);
add(x,y,val);
ind[y]++;
outd[x]++;
}
topsort();
for(int i=1;i<=n;i++){
if(outd==0&&c[i]>0){
f=true;
printf("%d %d\n",i,c[i]);
}
}
if(!f) printf("NULL");
}