1 #include<stdio.h>
2 #include<string.h>
3 #include<queue>
4 using namespace std;
5
6 const int max=100;
7 int c[3];
8 int w;
9 int vis[max][max];
10 int m;
11 typedef struct
12 {
13 int v[3];
14 int deep;
15 //ruct node *fa;
16 //t a;
17 //t b;
18 }node;
19
20
21 int bfs()
22 {
23 int i,j,k;
24 node t,n;
25 queue <node> q;
26 n.deep=0;
27 n.v[0]=c[0];
28 n.v[1]=n.v[2]=0;
29 q.push(n);
30 while(!q.empty())
31 {
32 t=q.front();
33 if(t.v[0]==w||t.v[1]==w||t.v[2]==w)
34 {
35 printf("Yes %d\n",t.deep);
36 return 1;
37 }
38 for(i=0;i<3;i++)
39 {
40 for(j=0;j<3;j++)
41 {
42 if(i==j) continue;
43 m=t.v[i]<c[j]-t.v[j]?t.v[i]:c[j]-t.v[j];
44 n=t;
45 n.v[i]-=m;
46 n.v[j]+=m;
47 if(!vis[n.v[1]][n.v[2]])
48 {
49 vis[n.v[1]][n.v[2]]=1;
50 n.deep++;
51 q.push(n);
52 }
53 }
54 }
55 k=q.size();
56 q.pop();
57 k=q.size();
58 }
59 return 0;
60 }
61
62
63 int main()
64 {
65 while(scanf("%d%d%d%d",&c[0],&c[1],&c[2],&w)!=EOF)
66 {
67 memset(vis,0,sizeof vis);
68
69 if(!bfs()) printf("No\n");
70 }
71 return 0;
72 }