#include <bits/stdc++.h>
using namespace std;
long long arr[1044], cnt, a1, a2, b1, b2, k, x, y;
void generate_lucky_number(long long nm) {
  if (nm > y) return;
  if (nm >= x) {
    arr[cnt++] = nm;
  }
  generate_lucky_number(nm * 10 + 4);
  generate_lucky_number(nm * 10 + 7);
}
double calcl(long long p, long long l, long long r) {
  long long tmp;
  if (arr[p] < l) return 0;
  if (arr[p] > r) {
    if (p == 0 || arr[p - 1] < l) return (double)(r - l + 1);
    if (arr[p - 1] > r) return 0;
    return (double)(r - arr[p - 1]);
  }
  if (p != 0) {
    if (arr[p - 1] >= l) return (double)(arr[p] - arr[p - 1]);
  }
  return (double)(arr[p] - l + 1);
}
double calch(long long p, long long l, long long r) {
  if (arr[p] > r) return 0;
  if (arr[p] < l) {
    if (p == cnt - 1 || arr[p + 1] > r) return (double)(r - l + 1);
    if (arr[p + 1] < l) return 0;
    return (double)(arr[p + 1] - l);
  }
  if (p != cnt - 1) {
    if (arr[p + 1] <= r) return (double)(arr[p + 1] - arr[p]);
  }
  return (double)(r - arr[p] + 1);
}
int main() {
  long long i, j;
  double total, sol, tmp1, tmp2;
  scanf("%lld%lld%lld%lld%lld", &a1, &a2, &b1, &b2, &k);
  total = (double)(a2 - a1 + 1);
  total *= (double)(b2 - b1 + 1);
  x = min(a1, b1);
  y = max(a2, b2);
  generate_lucky_number(0);
  sort(arr, arr + cnt);
  sol = 0;
  for (i = 0; i < cnt; i++) {
    j = i + k - 1;
    if (j >= cnt) break;
    tmp1 = calcl(i, a1, a2);
    tmp1 *= calch(j, b1, b2);
    sol += tmp1;
    tmp2 = calcl(i, b1, b2);
    tmp2 *= calch(j, a1, a2);
    sol += tmp2;
    if (k == 1 && tmp1 > 0 && tmp2 > 0) sol = sol - 1;
  }
  printf("%.12lf\n", sol / total);
  return 0;
}
