#include <bits/stdc++.h>
using namespace std;
const int Maxn = 360360 + 5;
int dp[Maxn], DP[Maxn];
long long n, m, k;
inline long long gcd(long long a, long long b) {
  return (a % b == 0 ? b : gcd(b, a % b));
}
inline long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
void init() {
  for (int i = 1; i <= 360360; i++) {
    dp[i] = dp[i - 1] + 1;
    for (int j = 1; j <= k; j++)
      if ((m + i) / j * j >= m) dp[i] = min(dp[i], dp[(m + i) / j * j - m] + 1);
    DP[i] = DP[i - 1] + 1;
    for (int j = 1; j <= k; j++) DP[i] = min(DP[i], DP[i / j * j] + 1);
  }
}
long long ans;
int main() {
  cin >> n >> m >> k;
  init();
  n -= m;
  ans += dp[n % 360360];
  ans += DP[360360] * (n / 360360);
  cout << ans;
  return 0;
}
