#include<stdio.h> #include<string.h> #include<stdlib.h> const int maxn=110; int c[maxn],u[maxn],a[maxn][maxn],w[maxn][maxn],rd[maxn],cd[maxn],q[maxn],p[maxn],pd[maxn]; int main(){ freopen("network.in","r",stdin); freopen("network.out","w",stdout); int i,j,k,m,n,x,y,z; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)scanf("%d%d",&c[i],&u[i]); for(i=1;i<=m;i++){ scanf("%d%d%d",&x,&y,&z); a[x][y]=1; w[x][y]=z; rd[y]++; cd[x]++; } int f=0,l=0; for(i=1;i<=n;i++) if(rd[i]==0){ q[++l]=i; } while(f<l){ f++; if(c[q[f]]<=0){ for(i=1;i<=n;i++) if(!p[i] && a[q[f]][i]){ rd[i]--; if(rd[i]==0) q[++l]=i; } }else{ for(i=1;i<=n;i++) if(!p[i] && a[q[f]][i]){ rd[i]--; if(rd[i]==0) q[++l]=i; c[i]+=c[q[f]]*w[q[f]][i]; if(!pd[i]){pd[i]=1;c[i]-=u[i];} } } p[q[f]]=1; } int sum=0; for(i=1;i<=n;i++) if(cd[i]==0 && c[i]>0)sum++; if(sum==0) puts("NULL"); else for(i=1;i<=n;i++) if(cd[i]==0 && c[i]>0) printf("%d %d\n",i,c[i]); return 0; }