#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int h,a,b;
struct Node{
int x;
int y;
int z;
int v;
};
int vis[101][101][101];
void bfs(int a1,int a2,int a3){
queue<Node>q;
Node q1,q2;
q1.x=a1;
q1.y=0;
q1.z=0;
q1.v=0;
q.push(q1);
memset(vis,0,sizeof(vis));
while(!q.empty()){
q2=q.front();
vis[q2.x][q2.y][q2.z]=1;
if(q2.x==a1/2&&q2.y==a1/2||q2.x==a1/2&&q2.z==a1/2||q2.z==a1/2&&q2.y==a1/2){
printf("%d\n",q2.v);
break;
}
else{
if(q2.x!=0){
if(q2.x>a2-q2.y){
q1.x=q2.x+q2.y-a2;
q1.y=a2;
q1.z=q2.z;
q1.v=q2.v+1;
}
else{
q1.x=0;
q1.y=q2.x+q2.y;
q1.z=q2.z;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
if(q2.x>a3-q2.z){
q1.x=q2.x+q2.z-a3;
q1.y=q2.y;
q1.z=a3;
q1.v=q2.v+1;
}
else{
q1.x=0;
q1.y=q2.y;
q1.z=q2.z+q2.x;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
}
if(q2.y!=0){
if(q2.y>a3-q2.z){
q1.x=q2.x;
q1.y=q2.y+q2.z-a3;
q1.z=a3;
q1.v=q2.v+1;
}
else{
q1.x=q2.x;
q1.y=0;
q1.z=q2.y+q2.z;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
if(q2.y>a1-q2.x){
q1.x=a1;
q1.y=q2.y+q2.x-a1;
q1.z=q2.z;
q1.v=q2.v+1;
}
else{
q1.x=q2.x+q2.y;
q1.y=0;
q1.z=q2.z;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
}
if(q2.z!=0){
if(q2.z>a2-q2.y){
q1.x=q2.x;
q1.y=a2;
q1.z=q2.y+q2.z-a2;
q1.v=q2.v+1;
}
else{
q1.x=q2.x;
q1.y=q2.y+q2.z;
q1.z=0;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
if(q2.z>a1-q2.x){
q1.x=a1;
q1.y=q2.y;
q1.z=q2.z+q2.x-a1;
q1.v=q2.v+1;
}
else{
q1.x=q2.x+q2.z;
q1.y=q2.y;
q1.z=0;
q1.v=q2.v+1;
}
if(vis[q1.x][q1.y][q1.z]==0){
vis[q1.x][q1.y][q1.z]=1;
q.push(q1);
}
}
}
q.pop();
}
if(q.empty())printf("NO\n");
}
int main(){
while(scanf("%d%d%d",&h,&a,&b)!=EOF&&h&&a&&b){
if(h%2==1)
printf("NO\n");
else
bfs(h,a,b);
}
return 0;
}