#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;
}
