#include <bits/stdc++.h>
using namespace std;
bool vis[1003][1003];
int n, m, len, ara[22];
double mem[1003][1003];
long long mem2[22][2][2], ones[1003], l[1003], r[1003];
double dp2(int pos, int cnt) {
  if (pos == n) return (cnt >= m);
  if (vis[pos][cnt]) return mem[pos][cnt];
  vis[pos][cnt] = 1;
  double tot = r[pos] - l[pos] + 1;
  double o = ones[pos];
  double z = tot - o;
  return mem[pos][cnt] =
             (z / tot) * dp2(pos + 1, cnt) + (o / tot) * dp2(pos + 1, cnt + 1);
}
long long dp(int pos, bool f1, bool f2) {
  if (pos == len) return f2;
  if (mem2[pos][f1][f2] != -1) return mem2[pos][f1][f2];
  mem2[pos][f1][f2] = 0;
  if (!f2) mem2[pos][f1][f2] += dp(pos + 1, 1, f2);
  if (f1) {
    if (!f2)
      mem2[pos][f1][f2] += dp(pos + 1, f1, 1);
    else
      mem2[pos][f1][f2] += 10ll * dp(pos + 1, f1, f2);
  } else {
    if (!f2)
      mem2[pos][f1][f2] += dp(pos + 1, ara[pos] > 1, 1);
    else
      mem2[pos][f1][f2] += ara[pos] * dp(pos + 1, 1, f2) + dp(pos + 1, f1, f2);
  }
  return mem2[pos][f1][f2];
}
void func2(long long x) {
  len = 0;
  while (x) ara[len++] = x % 10, x /= 10ll;
  reverse(ara, ara + len);
  return;
}
void func() {
  for (int i = 0; i < n; i++) {
    func2(r[i]);
    memset(mem2, -1, sizeof mem2);
    ones[i] = dp(0, 0, 0);
    if (l[i] > 1ll) {
      func2(l[i] - 1);
      memset(mem2, -1, sizeof mem2);
      ones[i] -= dp(0, 0, 0);
    }
  }
  return;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld %lld", &l[i], &r[i]);
  func();
  int k;
  scanf("%d", &k);
  m = ((n * k) + 99) / 100;
  printf("%.15f\n", dp2(0, 0));
  return 0;
}
