#include <bits/stdc++.h>
using namespace std;
const double PI = 3.141592653589793238;
template <typename T>
std::ostream& operator<<(std::ostream& os, const std::vector<T>& vector) {
  for (size_t i = 0; i < vector.size(); ++i) {
    os << vector[i] << " ";
  }
  return os;
}
long long x, y, m;
const double MAX = 1e18 + 1, MASH_EPS = 1e-8;
double Pow(double a, int n) {
  double res = 1.;
  while (n) {
    if (n & 1) {
      res *= a;
    }
    a *= a;
    n >>= 1;
  }
  return res;
}
bool Equal(double x, double y) { return fabs(x - y) < MASH_EPS; }
bool Less(double x, double y) { return x < y - MASH_EPS; }
double GetFib(int n) {
  return (Pow((1. + sqrt(5)) / 2., n) - Pow((1. - sqrt(5)) / 2., n)) / sqrt(5);
}
long long Go() {
  if (x >= m || y >= m) {
    return 0;
  }
  long long res = 0;
  if (x > y) {
    swap(x, y);
  }
  if (m <= 0 && x < m && y < m) {
    return -1;
  }
  if (m >= 0 && x <= 0 && y <= 0) {
    return -1;
  }
  if (x < 0 && y > 0) {
    res = -x / y + 1;
    x += res * y;
    return res + Go();
  }
  int l = 0, r = 88;
  while (l < r) {
    double med = (l + r) / 2;
    double num = GetFib(med) * x + GetFib(med + 1) * y;
    if (Less(num, double(m))) {
      l = med + 1;
    } else {
      r = med;
    }
  }
  return l;
}
int main() {
  std::ios_base::sync_with_stdio(false);
  cin >> x >> y >> m;
  cout << Go() << "\n";
  return 0;
}
