1 #include<bits/stdc++.h>
2 using namespace std;
3 struct node{
4 int x,y,z;
5 }b1,b2;
6 int read()
7 {
8 int f=1;char ch;
9 while((ch=getchar())<'0'||ch>'9')
10 if(ch=='-')f=-1;
11 int res=ch-'0';
12 while((ch=getchar())>='0'&&ch<='9')
13 res=res*10+ch-'0';
14 return res*f;
15 }
16 void write(int x)
17 {
18 if(x<0)
19 {
20 putchar('-');
21 x=-x;
22 }
23 if(x>9)write(x/10);
24 putchar(x%10+'0');
25 }
26 void Get(node &b)
27 {
28 if(b.x>b.y)swap(b.x,b.y);
29 if(b.y>b.z)swap(b.y,b.z);
30 if(b.x>b.z)swap(b.x,b.z);
31 }
32 int f1(node &b)
33 {
34 int step=0;
35 Get(b);
36 while(b.x+b.z!=b.y*2)
37 {
38 int d1=b.y-b.x,d2=b.z-b.y;
39 if(d1<d2)
40 {
41 int p=d2/d1;
42 if(d2%d1==0)p--;
43 b.x+=d1*p;b.y+=d1*p;
44 if(b.x>b.y)swap(b.x,b.y);
45 step+=p;
46 }
47 else
48 {
49 int p=d1/d2;
50 if(d1%d2==0)p--;
51 b.y-=d2*p;b.z-=d2*p;
52 if(b.y>b.z)swap(b.y,b.z);
53 step+=p;
54 }
55 }
56 return step;
57 }
58
59 bool pan(node b1,node b2)
60 {
61 if(b1.x==b2.x&&b1.y==b2.y&&b1.z==b2.z)return 1;
62 else return 0;
63 }
64 node f2(node b,int l)
65 {
66 Get(b);
67 while(l)
68 {
69 int d1=b.y-b.x,d2=b.z-b.y;
70 if(d1<d2)
71 {
72 int p=d2/d1;
73 if(d2%d1==0)p--;
74 if(p>l)p=l;
75 b.x+=p*d1;b.y+=p*d1;
76 if(b.x>b.y)swap(b.x,b.y);
77 l-=p;
78 }
79 else
80 {
81 int p=d1/d2;
82 if(d1%d2==0)p--;
83 if(p>l)p=l;
84 b.y-=p*d2;b.z-=p*d2;
85 if(b.y>b.z)swap(b.y,b.z);
86 l-=p;
87 }
88 }
89 return b;
90 }
91 int main()
92 {
93 b1.x=read();b1.y=read();b1.z=read();
94 b2.x=read();b2.y=read();b2.z=read();
95 Get(b1);Get(b2);
96 node bb1=b1,bb2=b2;
97 int t1=f1(bb1),t2=f1(bb2);
98 if(!pan(bb1,bb2))
99 {
100 printf("NO");
101 return 0;
102 }
103 int d=abs(t1-t2);
104 if(t1>t2)b1=f2(b1,d);
105 else b2=f2(b2,d);
106 int l=0,r=min(t1,t2),ff=0;
107 while(l<=r)
108 {
109 int m=l+r>>1;
110 bb1=f2(b1,m);
111 bb2=f2(b2,m);
112 if(pan(bb1,bb2))
113 {
114 ff=m;
115 r=m-1;
116 }
117 else l=m+1;
118 }
119 printf("YES\n");
120 write(d+2*ff);
121 return 0;
122 }