#include<stdio.h>
#include<math.h>
#include<string.h>
int a,b,cif,cif_val[20],nr_cif,apar;
char viz[20];
int pozitii[20],rez,sol;
int cifre(int val)
{
int nrc = 0;
if(!val)
return 1;
while(val)
{
val /= 10;
nrc++;
}
return nrc;
}
int combinare_valida()
{
int i, am = 0, sol = 0;
for(i = 1; i <= nr_cif; i++)
{
sol += (viz[i]) * am;
am = (am | (!viz[i]));
}
return sol >= apar;
}
void verificare(int val,int total)
{
int i;
// printf("////////////////////\n");
// printf("%d %d\n", val,total);
memset(viz,0,sizeof(viz));
for(i = 1 ; i <= total ; i++)
viz[pozitii[i]] = 1;
if(!combinare_valida())
return ;
for(i = nr_cif ; i >= 1 ; i--)
{
cif_val[i] = val % 10;
val /= 10;
}
/* for(i=1;i<=nr_cif;i++)
printf("%d ",viz[i]);
printf("\n");
for(i=1;i<=nr_cif;i++)
printf("%d ",cif_val[i]);
printf("\n"); */
int poz_libere = nr_cif - total;
for(i = 1 ; i <= nr_cif ; i++)
if(!viz[i])
{
poz_libere--;
if(cif_val[i]>cif)
rez += (cif_val[i] - 1) * pow(9,poz_libere);
else
rez += cif_val[i] * pow(9,poz_libere);
// printf("Adun %d\n",rez);
if(cif_val[i] == cif)
break;
}
else
{
if(cif < cif_val[i])
{
rez += pow(9,poz_libere);
// printf("Adun %d\n",rez);
break;
}
else if(cif > cif_val[i])
break;
}
if(i == nr_cif + 1)
{
rez++;
//printf("+1\n");
}
//printf("////////////////////////////\n");
}
void back_combinari(int poz,int ramase,int val,int total)
{
if(poz == nr_cif + 1)
{
if(ramase)
return ;
verificare(val,total);
return ;
}
back_combinari(poz + 1,ramase,val,total);
if(!ramase)
return ;
pozitii[ramase] = poz;
back_combinari(poz + 1,ramase - 1,val,total);
pozitii[ramase] = 0;
}
int below(int val,int nr)
{
rez=0;
if(val<0)
return 0;
back_combinari(1,nr,val,nr);
return rez;
}
int number_with_fixed(int nr)
{
return below(b,nr) - below(a-1,nr);
}
int main ()
{
freopen("cifre.in","r",stdin);
freopen("cifre.out","w",stdout);
scanf("%d%d%d%d", &a, &b, &cif, &apar);
nr_cif = cifre(b);
for(int i = apar ; i <= nr_cif ; i++)
sol += number_with_fixed(i);
if(!a && !cif && apar == 1)
sol++;
//printf("%d\n",sol);
double dv=(double)sol/(b-a+1);
printf("%.4lf\n",dv);
return 0;
}