#include <bits/stdc++.h>
using namespace std;
ifstream fin("cifre.in");
ofstream fout("cifre.out");
int a, b, c, k, nrCifre, dp[20][20], dp2[20][20][2];
vector <int> v;
int dinamica(int index, int contor){
if (dp[index][contor] > 0){
return dp[index][contor];
}
if (index == nrCifre + 1){
return contor >= k;
}
if (index == 1){
if (c == 0){
return dp[index][contor] = 9 * dinamica(index + 1, contor);
}
else{
return dp[index][contor] = dinamica(index + 1, contor + 1) + 8 * dinamica(index + 1, contor);
}
}
else{
return dp[index][contor] = dinamica(index + 1, contor + 1) + 9 * dinamica(index + 1, contor);
}
}
int dinamica2(int index, int contor, int pot){
if (dp2[index][contor][pot] > 0){
return dp2[index][contor][pot];
}
if (index == nrCifre + 1){
return contor >= k;
}
if (pot == 0){
if (index == 1){
if (c > v[index - 1] || c == 0){
return dp2[index][contor][pot] = (v[index - 1] - 1) * dinamica2(index + 1, contor, 1) + dinamica2(index + 1, contor, 0);
}
else{
if (c == v[index - 1]){
return dp2[index][contor][pot] = dinamica2(index + 1, contor + 1, 0) + (v[index - 1] - 1) * dinamica2(index + 1, contor, 1);
}
else{
return dp2[index][contor][pot] = dinamica2(index + 1, contor + 1, 1) + dinamica2(index + 1, contor, 0) + (v[index - 1] - 2) * dinamica2(index + 1, contor, 1);
}
}
}
else{
if (c > v[index - 1]){
return dp2[index][contor][pot] = v[index - 1] * dinamica2(index + 1, contor, 1) + dinamica2(index + 1, contor, 0);
}
else{
if (c == v[index - 1]){
return dp2[index][contor][pot] = dinamica2(index + 1, contor + 1, 0) + v[index - 1] * dinamica2(index + 1, contor, 1);
}
else{
return dp2[index][contor][pot] = dinamica2(index + 1, contor + 1, 1) + dinamica2(index + 1, contor, 0) + (v[index - 1] - 1) * dinamica2(index + 1, contor, 1);
}
}
}
}
else{
return dp[index][contor] = dinamica2(index + 1, contor + 1, 1) + 9 * dinamica2(index + 1, contor, 1);
}
}
int solve(int a){
if (a < 10){
if (c <= a){
return 1;
}
return 0;
}
v.clear();
while (a > 0){
v.push_back(a % 10);
a = a / 10;
}
reverse(v.begin(), v.end());
int ans = 0;
for (int i = 1; i < v.size(); ++i){
nrCifre = i;
memset(dp, 0, sizeof dp);
ans += dinamica(1, 0);
}
nrCifre = v.size();
memset(dp2, 0, sizeof dp2);
ans += dinamica2(1, 0, 0);
return ans;
}
int main(){
fin >> a >> b >> c >> k;
int diff = solve(b) - solve(a - 1);
fout << fixed << setprecision(4) << diff / (double)(b - a + 1);
fin.close();
fout.close();
return 0;
}