#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<stack>
#include<string.h>
using namespace std;
int main()
{
__int64 l,r,m,i,j,k,a;
__int64 num[100];
while(~scanf("%I64d %I64d %I64d",&l,&r,&k))
{
m=1;a=0;
int mark=0;
while(m<=r&&k!=1)
{
if(m>=l&&m<=r)
{
mark=1;
num[a++]=m;
}
m*=k;
if(m>r)/*******
//妙妙妙
break;**********/
}
if(mark==1&&k!=1)
{
printf("%I64d",num[0]);
for(i=1;i<a;i++)
printf(" %I64d",num[i]);
printf("\n");
}
else if(mark==0&&k!=1)
printf("-1\n");
else if(k==1)
printf("1\n");
}
return 0;
}
/*#define MAXN 101000
#define LL long long
#define ll __int64
using namespace std;
int main()
{
ll l,r,k;
while(scanf("%I64d%I64d%I64d",&l,&r,&k)!=EOF)
{
ll num=1;
int bz=0;
while(num<=r)
{
if(num>=l)
{
if(bz==0)
{
bz=1;
printf("%I64d",num);
}
else
printf(" %I64d",num);
}
if(num>r/k)
break;
num*=k;
}
if(bz==0)
printf("-1\n");
else
printf("\n");
}
return 0;
} */