#include <bits/stdc++.h>
using namespace std;
struct Fib {
  long long fib[2][2];
  Fib(){};
  Fib(long long a, long long b, long long c, long long d) {
    fib[0][0] = a;
    fib[0][1] = b;
    fib[1][0] = c;
    fib[1][1] = d;
  }
};
Fib multi(Fib a, Fib b) {
  Fib ans;
  for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
      ans.fib[i][j] = 0;
      for (int k = 0; k < 2; k++) {
        ans.fib[i][j] += a.fib[i][k] * b.fib[k][j];
      }
      ans.fib[i][j];
    }
  }
  return ans;
}
long long powermod(Fib a, long long b) {
  Fib ans = Fib(1, 0, 1, 0), x = Fib(1, 1, 1, 0);
  while (b) {
    if (b & 1) ans = multi(x, ans);
    b >>= 1;
    x = multi(x, x);
  }
  if (1e18 / a.fib[0][0] < ans.fib[0][0]) return 1e18;
  ans = multi(a, ans);
  return ans.fib[0][0];
}
long long sol(long long l, long long r, Fib a, long long m) {
  if (l == r) return l;
  long long mid = (l + r) / 2;
  if (m <= powermod(a, mid))
    return sol(l, mid, a, m);
  else
    return sol(mid + 1, r, a, m);
}
int main() {
  long long x, y, m, ans = 0;
  cin >> x >> y >> m;
  if (x >= m || y >= m) {
    cout << 0 << endl;
    return 0;
  } else if (x <= 0 && y <= 0) {
    cout << -1 << endl;
    return 0;
  }
  if (x < y) swap(x, y);
  if (y < 0) ans += abs(y) / x + 1, y += x * ans;
  Fib a = Fib(x, y, 0, 0);
  ans += sol(0, 100, a, m);
  cout << ans + 1 << endl;
}
