#include <bits/stdc++.h>
using namespace std;
int ed;
int l[360360 + 1], qd[8405400 + 1], qn[8405400 + 1];
int q[360360 + 1];
void bd(int first, int second) {
  qd[++ed] = second;
  qn[ed] = l[first];
  l[first] = ed;
}
inline void bfs(int st, long long v[]) {
  for (int i = (0); i < (360360 + 1); ++i) v[i] = -1;
  v[st] = 0;
  q[0] = st;
  for (int i = 0, j = 0; i <= j; i++) {
    for (int k = (l[q[i]]); k; k = qn[k])
      if (v[qd[k]] == -1) {
        v[qd[k]] = v[q[i]] + 1;
        q[++j] = qd[k];
      }
  }
}
int main(int argc, char **argv) {
  long long A, B, K;
  cin >> A >> B >> K;
  for (int i = (0); i < (360360 + 1); ++i) {
    if (i) bd(i, i - 1);
    for (int j = (2); j < (K + 1); ++j) bd(i, i - (i % j));
  }
  long long s[360360 + 1], t[360360 + 1];
  bfs(A % 360360, s);
  bfs(360360, t);
  if (A / 360360 == B / 360360)
    cout << s[B % 360360];
  else
    cout << (s[0] + t[0] * (A / 360360 - B / 360360 - 1) + t[B % 360360]);
  return 0;
}
