#include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f int s,n,m,ans; bool vis[101][101][101];//所有状态得标记。 bool flag; void dfs(int x,int y,int z,int step) { if((x==s/2&&y==s/2)||(x==s/2&&z==s/2)||(y==s/2&&z==s/2)) { ans=min(ans,step); flag=1; return; } if(x>0&&y<n) { int t=min(x,n-y); if(!vis[x-t][y+t][z]) { vis[x-t][y+t][z]=1; dfs(x-t,y+t,z,step+1); vis[x-t][y+t][z]=0; } } if(x>0&&z<s) { int t=min(x,s-z); if(!vis[x-t][y][z+t]) { vis[x-t][y][z+t]=1; dfs(x-t,y,z+t,step+1); vis[x-t][y][z+t]=0; } } if(y>0&&x<m) { int t=min(y,m-x); if(!vis[x+t][y-t][z]) { vis[x+t][y-t][z]=1; dfs(x+t,y-t,z,step+1); vis[x+t][y-t][z]=0; } } if(y>0&&z<s) { int t=min(y,s-z); if(!vis[x][y-t][z+t]) { vis[x][y-t][z+t]=1; dfs(x,y-t,z+t,step+1); vis[x][y-t][z+t]=0; } } if(z>0&&y<n) { int t=min(z,n-y); if(!vis[x][y+t][z-t]) { vis[x][y+t][z-t]=1; dfs(x,y+t,z-t,step+1); vis[x][y+t][z-t]=0; } } if(z>0&&x<m) { int t=min(z,m-x); if(!vis[x+t][y][z-t]) { vis[x+t][y][z-t]=1; dfs(x+t,y,z-t,step+1); vis[x+t][y][z-t]=0; } } } int main() { while(cin>>s>>m>>n) { if(s == 0 && n == 0 && m == 0) break; if(s % 2) { cout<<"NO"<<endl; continue; } ans=inf; flag=0; vis[0][0][s] =1; dfs(0,0,s,0); if(flag) cout<<ans<<endl; else cout<<"NO"<<endl; } return 0; }