#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void swap(T& a, U& b) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}
inline void swap(int& a, int& b) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}
inline void swap(long long& a, long long& b) {
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
}
template <typename T, typename U>
inline void smax(T& a, U b) {
  if (b > a) a = b;
}
template <typename T, typename U>
inline void smin(T& a, U b) {
  if (b < a) a = b;
}
inline int gcd(int a, int b) {
  if (a < b) swap(a, b);
  while (b > 0) {
    a %= b;
    swap(a, b);
  }
  return a;
}
inline long long gcd(long long a, long long b) {
  if (a < b) swap(a, b);
  while (b > 0) {
    a %= b;
    swap(a, b);
  }
  return a;
}
long long nchose(int a, int b) {
  long long ans = 1;
  smax(a, b - a);
  int p = 2;
  for (int i = (b - a + 1); i <= (b); i++) {
    ans *= (long long)i;
    while (p <= a && ans % p == 0) ans /= p++;
  }
  return ans;
}
static long long MOD = 1000000007;
int n, T, i, j, y;
double t, correct, wrong, def, ans, *a, *b, *c, *d;
double dp[5001][5001];
int main() {
  cin.sync_with_stdio(0);
  cin >> n >> T;
  dp[0][0] = 1;
  for (int i = 0; i < n; i++) {
    ;
    cin >> correct, correct /= 100;
    cin >> y;
    wrong = 1 - correct;
    def = pow(wrong, y);
    for (d = dp[i], a = d + T, b = dp[i + 1] + T, c = a - y; c >= d;
         a--, b--, c--) {
      *a -= *c * def, *b += *c * def;
    }
    a = dp[i], b = dp[i + 1];
    for (a = dp[i], d = a + T, b = dp[i + 1] + 1, c = a + 1; a != d;
         a++, b++, c++) {
      *b += *a * correct, *c += *a * wrong;
    }
  }
  for (i = 0; i < n; i++) {
    ans += dp[i][T] * i;
  }
  for (i = 0; i <= T; i++) {
    ans += dp[n][i] * n;
  }
  printf("%.9f", ans);
}
