#include<bits/stdc++.h>
#define int long long
using namespace std;
struct edge
{
int to,num,nxt;
}e[30005];
struct Queue
{
int x;
friend bool operator<(Queue a,Queue b)
{
return a.x>b.x;
}
};
queue<int>q;
priority_queue<Queue>ans;
int head[30005],cnt,c[30005],u[30005],vis[30005],in[30005],out[30005];
void add(int u,int v,int w)
{
e[++cnt]={v,w,head[u]};
head[u]=cnt;
}
signed main()
{
int n,p;
cin>>n>>p;
for(int i=1;i<=n;i++)
{
cin>>c[i]>>u[i];
if(c[i]>0)q.push(i),vis[i]=1;
c[i]-=u[i];
}
for(int i=1;i<=p;i++)
{
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
in[v]++;
out[u]++;
}
while(!q.empty())
{
int x=q.front();
q.pop();
vis[x]=0;
if(c[x]<0)continue;
for(int i=head[x];i;i=e[i].nxt)
{
int y=e[i].to;
if(vis[y]==0)
{
c[y]+=e[i].num*c[x];
q.push(y);
vis[y]=1;
}
else c[y]+=e[i].num*c[x];
}
}
for(int i=1;i<=n;i++)
{
if(out[i]==0&&c[i]>0)
{
Queue temp;
temp.x=i;
ans.push(temp);
}
}
if(ans.empty())
{
cout<<"NULL";
return 0;
}
while(!ans.empty())
{
Queue x=ans.top();
ans.pop();
cout<<x.x<<" "<<c[x.x]<<endl;
}
}