#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0;
  int f = 1;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
const int MAXN = 3000005;
const int INF = 0x3f3f3f3f;
int a[MAXN], f[MAXN], ans[MAXN];
int mark[MAXN], pri[MAXN];
int l, r, p, num, cnt, top;
void dfs(int k, int now) {
  if (now > r) return;
  if (k == cnt + 1) {
    a[++top] = now;
    return;
  }
  while (1) {
    dfs(k + 1, now);
    if (1ll * now * pri[k] > r) return;
    now *= pri[k];
  }
}
inline void dp() {
  for (int j = 2; j <= top; j++) f[j] = INF;
  for (int i = 2; i <= p; i++) {
    int pos = 0;
    for (int j = 1; j <= top; j++)
      if (a[j] % i == 0) {
        while (a[j] / i >= a[pos + 1] && pos <= top) pos++;
        f[j] = min(f[j], f[pos] + 1);
        if (i + f[j] <= p && !ans[j] && a[j] >= l) num++, ans[j] = 1;
      }
  }
}
int main(int argc, char const *argv[]) {
  l = read();
  r = read();
  p = read();
  for (int i = 2; i <= p; i++) {
    if (!mark[i]) pri[++cnt] = i;
    for (int j = 1; j <= cnt && pri[j] * i <= p; j++) {
      mark[pri[j] * i] = 1;
      if (i % pri[j] == 0) break;
    }
  }
  dfs(1, 1);
  sort(a + 1, a + top + 1);
  dp();
  printf("%d\n", num);
  return 0;
}
