var nr,nr0:array[-10..10,-10..10] of longint;
f,g:text;
v:array[0..100] of longint;
nr1,i,j,a,b,c,k:longint;
rez:real;
function max(x,y:longint):longint;
begin
if x>y then max:=x
else
max:=y;
end;
function fu(x:longint):longint;
var s:longint;
begin
v[0]:=0;
nr1:=0;
if x=0 then
nr1:=1;
while x<>0 do begin
inc(v[0]);
v[v[0]]:=x mod 10;
x:=x div 10;
end;
for i:=1 to v[0] shr 1 do begin
s:=v[i];
v[i]:=v[v[0]-i+1];
v[v[0]-i+1]:=s;
end;
s:=0;
for i:=1 to v[0] do begin
if c>=1 then begin
if v[i]>c then begin
s:=s+nr[v[0]-i,max(k-nr1,0)]*(v[i]-1);
s:=s+nr[v[0]-i,max(k-nr1-1,0)];
end;
if v[i]=c then begin
s:=s+nr[v[0]-i,max(k-nr1,0)]*v[i];
inc(nr1);
end;
if v[i]<c then
s:=s+nr[v[0]-i,max(k-nr1,0)]*v[i];
end;
if c=0 then begin
if v[i]>c then begin
s:=s+nr[v[0]-i,max(k-nr1,0)]*(v[i]-1);
if i<>1 then
s:=s+nr0[v[0]-i,max(k-nr1-1,0)]
else
s:=s+nr0[v[0]-i,k];
end;
if v[i]=c then begin
s:=s+nr[v[0]-i,max(k-nr1-1,0)]*v[i];
inc(nr1);
end;
if v[i]<c then
s:=s+nr[v[0]-i,max(k-nr1,0)]*v[i];
end;
end;
if nr1>=k then
s:=s+1;
fu:=s;
end;
begin
assign(f,'cifre.in'); reset(f);
assign(g,'cifre.out'); rewrite(g);
read(f,a,b,c,k);
nr[1,1]:=1;
nr[0,0]:=1;
for i:=1 to 9 do
nr[i,0]:=nr[i-1,0]*10;
for i:=2 to 9 do begin
for j:=1 to 9 do
nr[i,j]:=nr[i-1,j]*9+nr[i-1,j-1];
end;
nr0[1,1]:=1;
for i:=2 to 9 do
for j:=1 to 9 do
if c=0 then
nr0[i,j]:=nr0[i-1,j]+9*nr[i-1,j]
else
nr0[i,j]:=nr0[i-1,j]+8*nr[i-1,j]+nr[i-1,j-1];
nr0[0,0]:=1;
nr0[0,1]:=1;
nr0[1,0]:=9;
for i:=2 to 9 do
nr0[i,0]:=nr0[i-1,0]*10;
rez:=fu(b)-fu(a-1);
rez:=rez/(b-a+1);
rez:=trunc(rez*10000);
rez:=rez/10000;
writeln(g,rez:0:4);
close(f); close(g);
end.