#include <bits/stdc++.h>
using namespace std;
int pL, pR, vL, vR, k;
vector<int> v;
void f(long long x) {
  if (x > 1e9) return;
  v.push_back(x);
  f(x * 10 + 4);
  f(x * 10 + 7);
}
int get(int L, int R, int st, int en) {
  if (L > R || (L > en || R < st)) return 0;
  if (st >= L && en <= R) return en - st + 1;
  int ret = min(R, en) - max(L, st) + 1;
  assert(ret >= 0);
  return ret;
}
int main() {
  f(0);
  int n = v.size();
  v.push_back(1e9 + 1);
  sort(((v).begin()), ((v).end()));
  cin >> pL >> pR >> vL >> vR >> k;
  long double ret = 0;
  for (int i = 1; i + k - 1 < n; i++) {
    long long x = get(v[i - 1] + 1, v[i], pL, pR) * 1. *
                  get(v[i + k - 1], v[i + k] - 1, vL, vR);
    long long y = get(v[i - 1] + 1, v[i], vL, vR) * 1. *
                  get(v[i + k - 1], v[i + k] - 1, pL, pR);
    if (k == 1 && get(pL, pR, vL, vR) && v[i] >= max(pL, vL) &&
        v[i] <= min(pR, vR))
      x--;
    ret += x + y;
  }
  cout << setprecision(12) << fixed;
  cout << ret * 1. / (pR - pL + 1) / (vR - vL + 1) << '\n';
  return 0;
}
