import std.stdio, std.string, std.conv, std.range; import std.algorithm, std.array, std.typecons, std.container; import std.math, std.numeric, std.random, core.bitop; enum inf = 1_001_001_001; enum infl = 1_001_001_001_001_001_001L; alias Trip = Tuple!(long, "x", long, "y", long, "h"); void main() { long x, y, h; scan(x, y, h); x *= 1000; y *= 1000; int[Trip] dp; int rec(long x, long y, long h) { auto tr = Trip(x, y, h); if (tr in dp) { return dp[tr]; } dp[tr] = 0; if (x > h) { chmax(dp[tr], rec((x + 1) / 2, y, 2*h) + 1); } if (y > h) { chmax(dp[tr], rec(x, (y + 1) / 2, 2*h) + 1); } return dp[tr]; } auto ans = rec(x, y, h); writeln(ans); } void scan(T...)(ref T args) { auto line = readln.split; foreach (ref arg; args) { arg = line.front.to!(typeof(arg)); line.popFront; } assert(line.empty); } void fillAll(R, T)(ref R arr, T value) { static if (is(typeof(arr[] = value))) { arr[] = value; } else { foreach (ref e; arr) { fillAll(e, value); } } } bool chmin(T, U...)(ref T x, U args) { bool isChanged; foreach (arg; args) if (x > arg) { x = arg; isChanged = true; } return isChanged; } bool chmax(T, U...)(ref T x, U args) { bool isChanged; foreach (arg; args) if (x < arg) { x = arg; isChanged = true; } return isChanged; } void yes(bool ok, string y = "Yes", string n = "No") { return writeln(ok ? y : n); }