#include <bits/stdc++.h>
const double eps = (1e-10);
using namespace std;
int dcmp(double a, double b) {
  return fabs(a - b) <= eps ? 0 : (a > b) ? 1 : -1;
}
long long getBit(long long num, int idx) { return ((num >> idx) & 1ll) == 1ll; }
long long setBit1(long long num, int idx) { return num | (1ll << idx); }
long long setBit0(long long num, int idx) { return num & ~(1ll << idx); }
long long flipBit(long long num, int idx) { return num ^ (1ll << idx); }
int countNumBit1(long long mask) {
  int ret = 0;
  while (mask) {
    mask &= (mask - 1ll);
    ++ret;
  }
  return ret;
}
vector<pair<long long, long long> > v;
double p[1009], mem[1009][1009];
int n;
double k;
double solve(int id, int cnt) {
  if (id == n) {
    if (dcmp((cnt / (n + 0.0)), k) != -1) {
      return 1;
    }
    return 0;
  }
  if (mem[id][cnt] != -1) return mem[id][cnt];
  double ans = 0.0;
  ans += p[id] * solve(id + 1, cnt + 1);
  ans += (1 - p[id]) * solve(id + 1, cnt);
  mem[id][cnt] = ans;
  return ans;
}
int main() {
  v.push_back(make_pair(1, 1));
  string s1 = "1", s2 = "1";
  for (int i = 1; i <= 18; i++) {
    s1 += '0';
    s2 += '9';
    long long n1 = atoll(s1.c_str());
    long long n2 = atoll(s2.c_str());
    v.push_back(make_pair(n1, n2));
  }
  cin >> n;
  long long L, R;
  for (int i = 0; i < n; i++) {
    cin >> L >> R;
    long long rs = 0;
    for (int j = 0; j < ((int)(v).size()); j++) {
      long long a = v[j].first;
      long long b = v[j].second;
      if (a <= L && R <= b)
        rs += R - L + 1;
      else if (L <= a && b <= R)
        rs += b - a + 1;
      else if (a <= R && a >= L)
        rs += R - a + 1;
      else if (b <= R && b >= L)
        rs += b - L + 1;
    }
    p[i] = (rs / ((R - L + 1) + 0.0));
  }
  cin >> k;
  k /= 100;
  for (int i = 0; i < 1009; i++)
    for (int j = 0; j < 1009; j++) mem[i][j] = -1;
  cout << fixed << setprecision(9) << solve(0, 0);
}
