import sys def main(): import math N, K, M = map(int, sys.stdin.readline().split()) if M == 0: print(N) return max_B = 0 current = 1 while True: next_term = current * (1 + max_B * K) if next_term > N: break current = next_term max_B += 1 if max_B > 60: break freq = dict() for B in range(1, max_B + 1): terms = B + 1 minimal = 1 for i in range(terms): minimal *= (1 + i * K) if minimal > N: continue low = 1 high = 1 while True: val = 1 a = high for i in range(terms): val *= (a + i * K) if val > N: break if val > N: break high *= 2 max_A = 0 low = 1 high = high // 2 while low <= high: mid = (low + high) // 2 val = 1 a = mid for i in range(terms): val *= (a + i * K) if val > N: break if val <= N: max_A = mid low = mid + 1 else: high = mid - 1 if max_A == 0: continue for A in range(1, max_A + 1): x = 1 a = A for i in range(terms): x *= (a + i * K) if x > N: break if x > N: break if x not in freq: freq[x] = 0 freq[x] += 1 count = 0 for x in freq: if freq[x] == M: count += 1 print(count) if __name__ == "__main__": main()