#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
#define inf 1<<29
int N,M,S;
int Count;
struct node
{
int a,b,c;
int step;
};
int Flag[110][110][110];
void BFS()
{
queue<node>p;
node xx,yy;
xx.a=S;
xx.b=0;
xx.c=0;
xx.step=0;
p.push(xx);
while(!p.empty())
{
xx=p.front();
p.pop();
yy.step=xx.step+1;
if((xx.a==S/2&&xx.b==S/2)||(xx.a==S/2&&xx.c==S/2)||(xx.b==S/2&&xx.c==S/2))
{
Count=min(Count,xx.step);
}
if(xx.a+xx.b<=N) //第一个杯子倒到第二个杯子
{
yy.a=0;
yy.b=xx.b+xx.a;
yy.c=xx.c;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
else
{
yy.a=xx.a-(N-xx.b);
yy.b=N;
yy.c=xx.c;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
if(xx.a+xx.c<=M) // 第一个杯子倒到第三个杯子
{
yy.a=0;
yy.b=xx.b;
yy.c=xx.c+xx.a;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
else
{
yy.a=xx.a-(M-xx.c);
yy.b=xx.b;
yy.c=M;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
if(xx.b+xx.c<=M) //第二个杯子倒到第三个杯子
{
yy.a=xx.a;
yy.b=0;
yy.c=xx.c+xx.b;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
else
{
yy.a=xx.a;
yy.b=xx.b-(M-xx.c);
yy.c=M;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
yy.a=xx.a+xx.b; //第二个杯子倒到第一个杯子
yy.b=0;
yy.c=xx.c;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
if(xx.b+xx.c<=N) //第三个杯子倒到第二个杯子
{
yy.a=xx.a;
yy.b=xx.c+xx.b;
yy.c=0;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
else
{
yy.a=xx.a;
yy.b=N;
yy.c=xx.c-(N-xx.b);
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
yy.a=xx.a+xx.c; //第三个杯子倒到第一个杯子
yy.b=xx.b;
yy.c=0;
if(Flag[yy.a][yy.b][yy.c]==0)
{
p.push(yy);
Flag[yy.a][yy.b][yy.c]=1;
}
}
}
int main()
{
int i,j,k;
int flag;
while(~scanf("%d%d%d",&S,&N,&M)&&(S||N||M))
{
memset(Flag,0,sizeof(Flag));
Count=inf;
if(S%2==1)
{
printf("NO\n");
continue;
}
BFS();
if(Count==inf)
{
printf("NO\n");
}
else
printf("%d\n",Count);
}
return 0;
}