#include <bits/stdc++.h>   using namespace std;   long long pl, pr, vl, vr;   int k;   long long Inter(long long x1, long long x2, long long y1, long long y2) {     long long a = max(x1, y1);     long long b = min(x2, y2);     if (a > b)       return 0.0;     else       return b - a + 1;   }   long long GetProb(long long x1, long long x2, long long y1, long long y2) {     return Inter(x1, x2, pl, pr) * Inter(y1, y2, vl, vr) +            Inter(x1, x2, vl, vr) * Inter(y1, y2, pl, pr);   }   int main() {     cin >> pl >> pr >> vl >> vr >> k;     vector<long long> numbers;     numbers.push_back(0);     int a = 0;     for (int i = 0; i < 9; i++) {       int b = numbers.size();       for (int j = a; j < b; j++) {         numbers.push_back(numbers[j] * 10 + 4);         numbers.push_back(numbers[j] * 10 + 7);       }       a = b;     }     numbers.push_back(1000000000);     long long P = (pr - pl + 1) * (vr - vl + 1);     long long gP = 0;     int l = 1;     int r = k;     while (1) {       gP +=           GetProb(numbers[l - 1] + 1, numbers[l], numbers[r], numbers[r + 1] - 1);       l++;       r++;       if (r + 1 >= numbers.size()) break;     }     l = 1;     r = k + 1;     while (1) {       l++;       r++;       if (r + 1 >= numbers.size()) break;     }     l = 1;     if (k == 1)       while (1) {         gP -= GetProb(numbers[l], numbers[l], numbers[l], numbers[l]) / 2;         l++;         if (l + 1 >= numbers.size()) break;       }     printf( %.15f , (long double)gP / P);     return 0;   }   