#include <bits/stdc++.h>
void fre() {
  freopen("c://test//input.in", "r", stdin);
  freopen("c://test//output.out", "w", stdout);
}
template <class T>
inline void gmax(T &a, T b) {
  if (b > a) a = b;
}
template <class T>
inline void gmin(T &a, T b) {
  if (b < a) a = b;
}
using namespace std;
const int N = 5005, M = 0, Z = 1e9 + 7, maxint = 2147483647, ms31 = 522133279,
          ms63 = 1061109567, ms127 = 2139062143;
const double eps = 1e-8, PI = acos(-1.0);
map<int, int> mop;
struct A {};
int n, T, p, t;
double f[N][N];
int main() {
  while (~scanf("%d%d", &n, &T)) {
    double ans = 0;
    memset(f, 0, sizeof(f));
    f[0][0] = 1;
    for (int i = 1; i <= n; i++) {
      scanf("%d%d", &p, &t);
      if (t == 1) p = 100;
      double v = p / 100.0;
      double u = 1 - v;
      double tmp = 0;
      double U = 1;
      for (int i = 1; i < t; i++) U *= u;
      double V = U * v;
      for (int j = i; j <= T; j++) {
        if (p == 100)
          f[i][j] = f[i - 1][j - 1];
        else if (p == 0 && j >= t)
          f[i][j] = f[i - 1][j - t];
        else {
          tmp = tmp * u + f[i - 1][j - 1] * v;
          if (j >= t) tmp -= f[i - 1][j - t] * V;
          f[i][j] += tmp;
          if (j >= t) f[i][j] += f[i - 1][j - t] * U;
        }
        ans += f[i][j];
      }
    }
    printf("%.12f\n", ans);
  }
  return 0;
}
