#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=(int)1e6;
#define move asdasdasd
LL t[N+2],tt[N+2],p[N+2],b[N+2],u[N+2],bb[N+2]={};
LL move[N+2],stay[N+2],buy[N+2];
int n;
bool possible(LL need){
	for(int i=1;i<=n;++i) bb[i]=b[i];
	for(int i=1;i<n;++i) tt[i]=p[i],t[i]=u[i];
	for(int i=n-1;i>=1;--i){
		tt[i]-=min(tt[i],bb[i+1]);
		LL x;
		x=min(need,min(t[i],tt[i]));
		tt[i]-=x,need-=x;
		x=min(tt[i],bb[i]);
		tt[i]-=x,bb[i]-=x;
		if (tt[i]!=0) return false;
	}
	return true;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);
//	freopen("main.inp","r",stdin);
//	freopen("main.out","w",stdout);
	
	cin>>n;
	for(int i=1;i<=n;++i) cin>>b[i];
	for(int i=1;i<n;++i) cin>>p[i];
	for(int i=1;i<n;++i) cin>>u[i];
	
	LL sum=0;
	for(int i=1;i<n;++i) sum+=u[i];
	LL low=0,high=sum,ans=-1;
	while (low<=high){
		LL mid=(low+high)/2;
		if (possible(mid)){
			ans=mid;
			high=mid-1;
		}
		else low=mid+1;
	}
	if (ans==-1) {
		cout<<"NO";
		return 0;
	}
	LL need=ans;
	for(int i=n-1;i>=1;--i){
		move[i]=min(p[i],b[i+1]) , p[i]-=min(p[i],b[i+1]);
		LL x;
		x=min(need,p[i]);
		buy[i]=x,p[i]-=x,need-=x;
		x=min(p[i],b[i]);
		stay[i]=x,p[i]-=x,b[i]-=x;
		assert(p[i]==0);
	}
	cout<<"YES\n";
	cout<<ans<<'\n';
	for(int i=1;i<n;++i) cout<<stay[i]<<' '<<buy[i]<<' '<<move[i]<<'\n';
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |