#include <bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int n, k;
long long MAXTEN;
long long a[maxn], b[maxn];
long double dp[maxn][maxn], p[maxn];
bool was[maxn][maxn];
void init() {
  MAXTEN = 1;
  for (int i = 0; i < 18; i++) MAXTEN *= 10;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
  }
  scanf("%d", &k);
}
long double rec(int tek, int t) {
  if (tek < 0 && t == 0) return 1.0;
  if (tek < 0) return 0.0;
  if (t < 0) return 0.0;
  if (was[tek][t]) return dp[tek][t];
  was[tek][t] = true;
  return dp[tek][t] =
             p[tek] * rec(tek - 1, t - 1) + (1 - p[tek]) * rec(tek - 1, t);
}
long long intersect(long long a, long long b, long long c, long long d) {
  long long beg = max(a, c), end = min(b, d);
  return max(end - beg + 1, 0LL);
}
void solve() {
  for (int i = 0; i < n; i++) {
    long long ed = 0;
    int tt = 0;
    for (long long j = 1; tt < 19; j *= 10, tt++) {
      ed += intersect(j, j * 2 - 1, a[i], b[i]);
    }
    b[i] = b[i] - a[i] + 1;
    a[i] = ed;
    p[i] = ((long double)a[i]) / (b[i]);
  }
  long double res = 0.0;
  for (int i = 0; i <= n; i++) {
    if (i * 100 >= k * n) {
      res += rec(n - 1, i);
    }
  }
  printf("%.18lf", double(res));
}
int main() {
  init();
  solve();
  return 0;
}
