#include <bits/stdc++.h>
#pragma comment(linker, "/stack:64000000")
using namespace std;
template <typename first>
inline first abs(const first& a) {
  return a < 0 ? -a : a;
}
template <typename first>
inline first sqr(const first& a) {
  return a * a;
}
const long double PI = 3.1415926535897932384626433832795;
const long double EPS = 1e-9;
const int INF = 1000 * 1000 * 1000;
const int N = 1000 + 13;
int n, k;
long double p[N];
long double z[N][N];
long long deg10[20];
inline int leng(long long n) {
  if (n == 0) return 1;
  int res = 0;
  while (n > 0) res++, n /= 10;
  return res;
}
inline int fir(long long n) {
  while (n >= 10) n /= 10;
  return int(n % 10);
}
long long getOnes(long long lf, long long rg) {
  int lenlf = leng(lf) - 1, lenrg = leng(rg) - 1;
  if (lenlf == lenrg) {
    if (fir(lf) > 1) return 0;
    rg = min(rg, deg10[lenrg] * 2 - 1);
    return rg - lf + 1;
  }
  assert(lenlf < lenrg);
  long long ans = 0;
  if (fir(lf) == 1) ans += (deg10[lenlf] * 2 - 1) - lf + 1;
  {
    long long curlf = deg10[lenrg];
    long long currg = min(deg10[lenrg] * 2 - 1, rg);
    ans += currg - curlf + 1;
  }
  for (int i = lenlf + 1; i < lenrg; i++) ans += deg10[i];
  return ans;
}
int main() {
  deg10[0] = 1LL;
  for (int i = 1; i <= int(18); i++) deg10[i] = deg10[i - 1] * 10LL;
  cin >> n;
  for (int i = 0; i < int(n); i++) {
    long long lf, rg;
    cin >> lf >> rg;
    long long t = getOnes(lf, rg);
    p[i] = t * 1.0 / (rg - lf + 1);
  }
  cin >> k;
  k = (k * n / 100) + (k * n % 100 != 0);
  assert(k <= n);
  z[0][0] = 1.0;
  for (int i = 0; i < int(n); i++)
    for (int j = 0; j < int(i + 1); j++) {
      z[i + 1][j] += z[i][j] * (1.0 - p[i]);
      z[i + 1][j + 1] += z[i][j] * p[i];
    }
  long double ans = 0.0;
  for (int i = k; i <= n; i++) ans += z[n][i];
  cout << setprecision(10) << fixed;
  cout << ans << endl;
  return 0;
}
