#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e3 + 5;
const long long modulo = 1000000007;
const double pi = 3.14159;
template <class T>
ostream &operator<<(ostream &out, vector<T> &A) {
  for (auto x : A) out << x << " ";
  return out;
}
template <class T>
ostream &operator<<(ostream &out, set<T> &A) {
  for (auto x : A) out << x << " ";
  return out;
}
template <class T>
ostream &operator<<(ostream &out, unordered_set<T> &A) {
  for (auto x : A) out << x << " ";
  return out;
}
long long power(long long x, unsigned long long y) {
  long long res = 1;
  x = x % modulo;
  if (x == 0) return 0;
  while (y > 0) {
    if (y & 1) res = (res * x) % modulo;
    y = y >> 1;
    x = (x * x) % modulo;
  }
  return res % modulo;
}
long long mceil(long long a, long long b) {
  if (a % b == 0)
    return a / b;
  else
    return a / b + 1;
}
struct Person {
  long long A;
  long long B;
};
bool cmp(Person a, Person b) { return a.A < b.A; }
long long n, m, k;
long long solve(long long x, long long y) {
  if (max(x, y) >= k) return 0;
  long long mn = min(x, y);
  long long mx = max(x, y);
  x = mn;
  y = mx;
  if (x < 0) {
    long long T = (abs(x) + y - 1) / y;
    x += T * y;
    return T + solve(x, y);
  }
  return 1 + solve(mn + mx, mx);
}
void solve() {
  cin >> n >> m >> k;
  if (n + m <= min(n, m) and max(n, m) < k)
    cout << "-1";
  else {
    long long x = solve(n, m);
    cout << x;
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  solve();
}
