#include <bits/stdc++.h>
using namespace std;
const int64_t infll = 9223372036854775807LL;
bool tryEV(double ev, int64_t R, int64_t N, vector<int64_t> f,
           vector<int64_t> s, vector<double> p) {
  vector<vector<double>> dp(N);
  for (int64_t i = (0); i < (N); ++i) dp[i].assign(R + 1, 0.0);
  for (int64_t i = N - 1; i >= 0; i--) {
    double ff = (double)f[i];
    double ss = (double)s[i];
    for (int64_t t = R; t >= 0; t--) {
      double evplay;
      double goodtime = (i == N - 1) ? ff : ff + dp[i + 1][t];
      double badtime = (t - s[i] + f[i] < 0) ? ss + ev
                       : (i == N - 1)        ? ss
                                             : ss + dp[i + 1][t - s[i] + f[i]];
      evplay = p[i] * goodtime + (1.0 - p[i]) * badtime;
      dp[i][t] = min(evplay, ev);
    }
  }
  return dp[0][R] < ev;
}
void solve() {
  int64_t N, R;
  cin >> N >> R;
  vector<double> P(N);
  vector<int64_t> f(N);
  vector<int64_t> s(N);
  for (int64_t i = (0); i < (N); ++i) {
    int64_t pp;
    cin >> f[i] >> s[i] >> pp;
    P[i] = 0.01 * (double)pp;
    R -= f[i];
  }
  double mintime = 0;
  for (int64_t i = (0); i < (N); ++i) {
    mintime += (double)f[i];
  }
  double maxtime = 10.0 * mintime;
  while (!tryEV(maxtime, R, N, f, s, P)) {
    mintime = maxtime;
    maxtime *= 10;
  }
  while (0.5 * (maxtime - mintime) / max(1.0, mintime) > 1e-10) {
    double mid = 0.5 * (maxtime + mintime);
    if (tryEV(mid, R, N, f, s, P))
      maxtime = mid;
    else
      mintime = mid;
  }
  cout << 0.5 * (maxtime + mintime) << endl;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cout << fixed << setprecision(15);
  solve();
  return 0;
}
