#include <bits/stdc++.h>
using namespace std;
char __INPUT[25];
inline int _Int() {
  scanf("%s", __INPUT);
  return atoi(__INPUT);
}
inline long long int _LLi() {
  scanf("%s", __INPUT);
  return atoll(__INPUT);
}
long long int bigMod(long long int A, long long int P, int M) {
  long long int R = 1;
  for (A %= M; P; P >>= 1) {
    if (P & 1) R = (R * A) % M;
    A = (A * A) % M;
  }
  return R;
}
long long int bigMul(long long int A, long long int B, long long int M) {
  long long int R = 0;
  for (A %= M; B; B >>= 1) {
    if (B & 1) R = (R + A) % M;
    A = (A + A) % M;
  }
  return R;
}
unsigned long long int _pow(unsigned long long int A, int P) {
  unsigned long long int R = 1;
  for (; P; P >>= 1) {
    if (P & 1) R = (R * A);
    A = (A * A);
  }
  return R;
}
template <class T>
T GCD(T x, T y) {
  while (x) x ^= y ^= x ^= y %= x;
  return y;
}
long long int rng = _pow(10, 18);
bool check(long long int x, long long int y) {
  long long int z = x * y;
  return (z / y) == x && (z / x) == y;
}
void Main() {
  unsigned long long int f, t, k;
  scanf("%llu %llu", &f, &t);
  if (f > t) swap(f, t);
  scanf("%llu", &k);
  long long int pw = 1;
  int ans = 0;
  for (int i = 0; pw <= t; i++) {
    if (pw >= f && pw <= t) {
      ans++;
      printf("%llu ", pw);
    }
    if (!check(pw, k)) {
      break;
    }
    pw = pw * k;
  }
  if (ans == 0) printf("-1");
}
int main() {
  Main();
  return 0;
}
