#include <bits/stdc++.h>
#define int long long
using namespace std;

unsigned char dp[205][205][20][20]; // dp  zyanai kedo

int even[20][3]={
  {5,4,1},
  {6,0,2},
  {7,1,3},
  {8,2,4},
  {9,3,0},
  {0,11,10},
  {1,12,11},
  {2,13,12},
  {3,14,13},
  {4,10,14},
  {15,9,5},
  {16,5,6},
  {17,6,7},
  {18,7,8},
  {19,8,9},
  {10,16,19},
  {11,17,15},
  {12,18,16},
  {13,19,17},
  {14,15,18}
};
int odd[20][3]={
  {5,4,1},
  {6,0,2},
  {7,1,3},
  {8,2,4},
  {9,3,0},
  {0,11,10},
  {1,12,11},
  {2,13,12},
  {3,14,13},
  {4,10,14},
  {15,9,5},
  {16,5,6},
  {17,6,7},
  {18,7,8},
  {19,8,9},
  {10,16,19},
  {11,17,15},
  {12,18,16},
  {13,19,17},
  {14,15,18}
};
int odx[]={0,-1,1};
int ody[]={-1,0,0};
int edx[]={0,-1,1};
int edy[]={1,0,0};
void init(){
  for(int i=0;i<20;i++){
    swap(odd[i][1],odd[i][2]);
  }
  for(int i=0;i<205;i++)
    for(int j=0;j<205;j++)
      for(int k=0;k<20;k++)
        for(int l=0;l<20;l++)
          dp[i][j][k][l]=200;
      }

      struct point{
        int cost,x,y,muki,sita;
      };

      point A;

      void BFS(){
        A.sita=0;
        A.cost=0;
        A.muki=5;
        A.x=102;
        A.y=102;
        queue<point>q;
        q.push(A);
        dp[0][0][0][5]=0;
        while(!q.empty()){
          point P=q.front();q.pop();
          int y=P.y;
          int x=P.x;
          int muki=P.muki;
          int cost=P.cost;
    int sita=P.sita;     //cout<<y<<' '<<x<<' '<<sita<<endl;
    //cout<<x-102<<' '<<y-120<<' '<<sita<<' '<<cost<<endl;
    //if(cost==5)return;


    if(cost%2){
      int k=0;
      for(int i=0;i<3;i++){
        if(odd[sita][i]==muki){
          k=i;
          break;
        }
      }//continue;
      for(int i=0;i<3;i++,k=(k+1)%3){
        int yy=y+ody[i];
        int xx=x+odx[i];
        if( yy< 0 || xx< 0 || 204<xx || 204<yy )continue;
        int nex_sita=odd[sita][k];
        int nex_muki=sita;
        int l=0;
        //if(cost==1&&x==101&&y==102)cout<<i<<' '<<sita<<' '<<nex_sita<<' '<<muki<<endl;
        for(int j=0;j<3;j++){
          if(even[nex_sita][j]==sita){
            l=j;
            break;
          }
        }
        if(i==0){
          nex_muki=sita;
        }
        else if(i==1){
          nex_muki=even[nex_sita][(l+1)%3];
        }
        else{
          nex_muki=even[nex_sita][(l+2)%3];
        }
        if(dp[yy][xx][nex_sita][nex_muki]!=200)continue;
        //if(cost==1&&x==101&&y==102)cout<<l<<' '<<nex_sita<<' '<<nex_muki<<endl;
        //if(cost==1&&xx==101&&yy==102&&cost==1)cout<<sita<<' '<<nex_sita<<' '<<cost<<endl;
        dp[yy][xx][nex_sita][nex_muki]=cost+1;
        A.sita=nex_sita;
        A.cost=cost+1;
        A.muki=nex_muki;
        A.x=xx;
        A.y=yy;
        q.push(A);
      }
    }
    else{
      int k=0;
      for(int i=0;i<3;i++){
        if(even[sita][i]==muki){
          k=i;
          break;
        }
      }//continue;
      for(int i=0;i<3;i++,k=(k+1)%3){
        int yy=y+edy[i];
        int xx=x+edx[i];
        if( yy< 0 || xx< 0 || 204<xx || 204<yy )continue;
        int nex_sita=even[sita][k];
        int nex_muki=sita;
        int l=0;
        //if(cost==0&&xx==0+102&&yy==101&&cost==2)cout<<sita<<' '<<nex_sita<<' '<<cost<<endl;
        for(int j=0;j<3;j++){
          if(odd[nex_sita][j]==sita){
            l=j;
            break;
          }
        }
        if(i==0){
          nex_muki=sita;
        }
        else if(i==1){
          nex_muki=odd[nex_sita][(l+1)%3];
        }
        else{
          nex_muki=odd[nex_sita][(l+2)%3];
        }
        if(dp[yy][xx][nex_sita][nex_muki]!=200)continue;
        //if(cost==0&&xx==101&&yy==102&&cost==0)cout<<"even"<<i<<' '<<l<<' '<<sita<<' '<<nex_sita<<' '<<nex_muki<<endl;
        //if(cost==2&&xx==0+102&&yy==101&&cost==2)cout<<sita<<' '<<nex_sita<<' '<<cost<<endl;
        dp[yy][xx][nex_sita][nex_muki]=cost+1;
        A.sita=nex_sita;
        A.cost=cost+1;
        A.muki=nex_muki;
        A.x=xx;
        A.y=yy;
        q.push(A);
      }
    }
  }
}

signed main(){
  int x,y,c;
  init();
  BFS();
  while(cin>>x>>y>>c){
    if(!x&&!y&&!c)break;
    x+=102;
    y+=102;
    int ans=1e9;
    for(int i=0;i<20;i++){
      ans=min(ans,(int)dp[y][x][c][i]);
    }
    cout<<ans<<endl;
  }

  return 0;
}


Measured memory_bytes: 20016