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

int 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(even[i][1],even[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]=1e8;
}

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;

    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;
	for(int j=0;j<3;j++){
	  if(even[nex_sita][i]==sita){
	    l=i;
	    break;
	  }
	}
	if(i==0){
	  nex_muki=sita;
	}
	else if(i==1){
	  nex_muki=even[nex_sita][(l+1)%2];
	}
	else{
	  nex_muki=even[nex_sita][(l+2)%2];
	}
	if(dp[yy][xx][nex_sita][nex_muki]!=1e8)continue;
	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==2&&xx==0+102&&yy==101&&cost==2)cout<<sita<<' '<<nex_sita<<' '<<cost<<endl;
	for(int j=0;j<3;j++){
	  if(even[nex_sita][i]==sita){
	    l=i;
	    break;
	  }
	}
	if(i==0){
	  nex_muki=sita;
	}
	else if(i==1){
	  nex_muki=odd[nex_sita][(l+1)%2];
	}
	else{
	  nex_muki=odd[nex_sita][(l+2)%2];
	}
	if(dp[yy][xx][nex_sita][nex_muki]!=1e8)continue;
	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,dp[y][x][c][i]);
    }
    cout<<ans<<endl;
  }
    
  return 0;
}

