#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
const int L =100;
typedef unsigned char u8;
const u8 near[20][3]= {
	{1,	5,	4},
	{2,	6,	0},
	{3,	7,	1},
	{4,	8,	2},
	{0,	9,	3},
	{10,0,	11},
	{11,1,	12},
	{12,2,	13},
	{13,3,	14},
	{14,4,	10},
	{5,	15,	9},
	{6,	16,	5},
	{7,	17,	6},
	{8,	18,	7},
	{9,	19,	8},
	{19,10, 16},
	{15,11,	17},
	{16,12,	18},
	{17,13,	19},
	{18,14, 15}
};

u8 f[L<<1|1][L<<1|1][20][3],z=0;
struct info{
	u8 x,y,b,d;
	void call(){z = f[x][y][b][d]+1;}
};
queue<info> q;

void check(u8 x,u8 y,u8 b,u8 a,u8 s){
	static u8 d;
	for(d=0;near[b][d]!=a;++d);
	d = (d+s)%3; 
	if(f[x][y][b][d]>z){
		f[x][y][b][d]=z;
		info tmp = {x,y,b,d};
		q.push(tmp);
	}
}
void predo(){
	memset(f,128,sizeof(f));
	check(L,L,0,5,0);
	for(u8 x,y,b,d;q.size();q.pop()){
		q.front().call();
		x = q.front().x;
		y = q.front().y;
		b = q.front().b;
		d = q.front().d;
		if(z>100)continue;
		//if(z<5){printf("%d %d %d %d %d\n",x-L, y-L,(int) b,(int) near[b][d],(int) f[x][y][b][d]);}
		if(x+y &1){
			check(x+1,y,near[b][(d+1)%3],b,2);
			check(x,y-1,near[b][d],b,0);
			check(x-1,y,near[b][(d+2)%3],b,1);
		}else{
			check(x+1,y,near[b][(d+2)%3],b,1);
			check(x,y+1,near[b][d],b,0);
			check(x-1,y,near[b][(d+1)%3],b,2);
		}
	}
}
int ans(unsigned char * x){
	return min(x[0],min(x[1],x[2]));
}
int main(){
	predo();
	for(int x,y,b;scanf("%d%d%d",&x,&y,&b),x||y||b;)
		printf("%d\n",ans(f[x+L][y+L][b]));
	return 0;
}
