1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 #include <cstring>
5 #include <algorithm>
6 #include <queue>
7 #include <stack>
8 using namespace std;
9 struct node
10 {
11 int a,b,c,step;
12 };
13 int n,m,s,vis[120][120][120],flag;
14 void bfs()
15 {
16 node s1,temp,next;
17 queue<node>q;
18 s1.a=s;s1.b=0;s1.c=0;s1.step=0;
19 vis[s][0][0]=1;
20 q.push(s1);
21 while(!q.empty())
22 {
23 temp=q.front();q.pop();
24 if(temp.a==temp.b&&temp.c==0||temp.a==temp.c&&temp.b==0||temp.b==temp.c&&temp.a==0)
25 {
26 printf("%d\n",temp.step);
27 flag=1;
28 return;
29 }
30 if(temp.a!=0&&temp.b<n)//s倒入n
31 {
32 if(n-temp.b>=temp.a)
33 {
34 next.a=0;
35 next.b=temp.a+temp.b;
36 }
37 else
38 {
39 next.a=temp.a-(n-temp.b);
40 next.b=n;
41 }
42 next.c=temp.c;
43 if(vis[next.a][next.b][next.c]==0)
44 {
45 next.step=temp.step+1;
46 vis[next.a][next.b][next.c]=1;
47 q.push(next);
48 }
49 }
50 if(temp.a!=0&&temp.c<m)//s倒入m
51 {
52 if(m-temp.c>=temp.a)
53 {
54 next.a=0;
55 next.c=temp.a+temp.c;
56 }
57 else
58 {
59 next.a=temp.a-(m-temp.c);
60 next.c=m;
61 }
62 next.b=temp.b;
63 if(vis[next.a][next.b][next.c]==0)
64 {
65 next.step=temp.step+1;
66 vis[next.a][next.b][next.c]=1;
67 q.push(next);
68 }
69 }
70 if(temp.b!=0&&temp.c<m)//n倒入m
71 {
72 if(m-temp.c>=temp.b)
73 {
74 next.b=0;
75 next.c=temp.b+temp.c;
76 }
77 else
78 {
79 next.b=temp.b-(m-temp.c);
80 next.c=m;
81 }
82 next.a=temp.a;
83 if(vis[next.a][next.b][next.c]==0)
84 {
85 next.step=temp.step+1;
86 vis[next.a][next.b][next.c]=1;
87 q.push(next);
88 }
89 }
90 if(temp.c!=0&&temp.b<n)//m倒入n
91 {
92 if(n-temp.b>=temp.c)
93 {
94 next.c=0;
95 next.b=temp.c+temp.b;
96 }
97 else
98 {
99 next.c=temp.c-(n-temp.b);
100 next.b=n;
101 }
102 next.a=temp.a;
103 if(vis[next.a][next.b][next.c]==0)
104 {
105 next.step=temp.step+1;
106 vis[next.a][next.b][next.c]=1;
107 q.push(next);
108 }
109 }
110 if(temp.b!=0&&temp.a!=s)//n倒入s
111 {
112 next.a=temp.a+temp.b;
113 next.b=0;
114 next.c=temp.c;
115 if(vis[next.a][next.b][next.c]==0)
116 {
117 next.step=temp.step+1;
118 vis[next.a][next.b][next.c]=1;
119 q.push(next);
120 }
121 }
122 if(temp.c!=0&&temp.a!=s)//m倒入s
123 {
124 next.a=temp.a+temp.c;
125 next.c=0;
126 next.b=temp.b;
127 if(vis[next.a][next.b][next.c]==0)
128 {
129 next.step=temp.step+1;
130 vis[next.a][next.b][next.c]=1;
131 q.push(next);
132 }
133 }
134 }
135 }
136 int main(int argc, char *argv[])
137 {
138 while(scanf("%d%d%d",&s,&n,&m)!=EOF)
139 {
140 if(s==0&&n==0&&m==0)
141 break;
142 if(n+m<s||n+m>s||s%2==1)
143 {
144 printf("NO\n");
145 continue;
146 }
147 memset(vis,0,sizeof(vis));
148 flag=0;
149 bfs();
150 if(!flag)
151 printf("NO\n");
152 }
153 }