const int Mod=10086001;
int quick_pow(int a,int k){
int ans=1;
while(k){
if(k&1)ans=1LL*ans*a%Mod;
a=1LL*a*a%Mod;
k>>=1;
}
return ans;
}
LL my_pow(int a,int k){
LL ans=1;
while(k--)ans*=a;
return ans;
}
const int MAXL=64,MAXP=10;
int dp[MAXL][1<<MAXP],s[MAXL];
int main()
{
LL n=read_LL();
int k=read_int(),p=read_int(),S=(1<<p)-1;
if(k==1){
enter(1);
return 0;
}
dp[1][0]=dp[1][1]=1;
s[1]=2;
_for(i,2,MAXL){
_for(j,0,1<<p){
dp[i][(j<<1)&S]=(dp[i][(j<<1)&S]+dp[i-1][j])%Mod;
if((j&1)==0&&(j&(1<<(p-1)))==0)
dp[i][(j<<1|1)&S]=(dp[i][(j<<1|1)&S]+dp[i-1][j])%Mod;
}
_for(j,0,1<<p)
s[i]=(s[i]+dp[i][j])%Mod;
}
int ans=1;
for(int i=1;;i++){
LL lef=n/my_pow(k,i)+1,rig=n/my_pow(k,i-1);
LL cnt=rig-lef+1-((rig/k)-(lef+k-1)/k+1);
ans=1LL*ans*quick_pow(s[i],cnt%(Mod-1))%Mod;
if(lef==1)break;
}
enter(ans);
return 0;
}