#include <bits/stdc++.h>
using namespace std;
#define Long long long
#define bint __int128
#define _3bkarm cin.tie(NULL); cout.tie(NULL); ios::sync_with_stdio(false);
void get_shit_done() {
int n, x;
cin >> n >> x;
vector<int> S(n), C(n), P(n);
for (int i = 0; i < n; ++i) {
cin >> S[i] >> C[i] >> P[i];
}
auto get = [&](int c) {
return 1.0 * (1.0 * c) / (100.0);
};
vector<int> ord(n);
for (int i = 0; i < n; ++i) {
ord[i] = i;
}
double ans = 0;
do {
vector<int> s(n), c(n), p(n);
for (int i = 0; i < n; ++i) {
s[i] = S[ord[i]];
c[i] = C[ord[i]];
p[i] = P[ord[i]];
}
vector<double> dp[2];
for (int i = 0; i < 2; ++i) {
dp[i].assign(x + 1, 0);
}
for (int i = n - 1, at = 1 - (n & 1); i >= 0; --i, at = 1 - at) {
dp[at].assign(x + 1, 0);
for (int have = 0; have <= x; ++have) {
double leave = dp[1 - at][have], take = 0;
if (have >= c[i]) {
take = get(p[i]) * (s[i] + dp[1 - at][ have - c[i] ]);
take += ( 1.0 - get(p[i]) ) * dp[at][ have - c[i] ];
}
dp[at][have] = max(leave, take);
}
}
ans = max(ans, dp[0][x]);
} while ( next_permutation( ord.begin(), ord.end() ) );
cout << ans;
}
signed main() {
_3bkarm
cout << fixed << setprecision(8);
int ts = 1;
// cin >> ts;
while (ts--) {
get_shit_done();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBMb25nIGxvbmcgbG9uZwojZGVmaW5lIGJpbnQgX19pbnQxMjgKI2RlZmluZSBfM2JrYXJtIGNpbi50aWUoTlVMTCk7IGNvdXQudGllKE5VTEwpOyBpb3M6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7Cgp2b2lkIGdldF9zaGl0X2RvbmUoKSB7CiAgICBpbnQgbiwgeDsKICAgIGNpbiA+PiBuID4+IHg7CgogICAgdmVjdG9yPGludD4gUyhuKSwgQyhuKSwgUChuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY2luID4+IFNbaV0gPj4gQ1tpXSA+PiBQW2ldOwogICAgfQoKICAgIGF1dG8gZ2V0ID0gWyZdKGludCBjKSB7CiAgICAgICAgcmV0dXJuIDEuMCAqICgxLjAgKiBjKSAvICgxMDAuMCk7CiAgICB9OwoKICAgIHZlY3RvcjxpbnQ+IG9yZChuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgb3JkW2ldID0gaTsKICAgIH0KCiAgICBkb3VibGUgYW5zID0gMDsKICAgIGRvIHsKICAgICAgICB2ZWN0b3I8aW50PiBzKG4pLCBjKG4pLCBwKG4pOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAgICAgICAgIHNbaV0gPSBTW29yZFtpXV07CiAgICAgICAgICAgIGNbaV0gPSBDW29yZFtpXV07CiAgICAgICAgICAgIHBbaV0gPSBQW29yZFtpXV07CiAgICAgICAgfQogICAgICAgIHZlY3Rvcjxkb3VibGU+IGRwWzJdOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjsgKytpKSB7CiAgICAgICAgICAgIGRwW2ldLmFzc2lnbih4ICsgMSwgMCk7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBuIC0gMSwgYXQgPSAxIC0gKG4gJiAxKTsgaSA+PSAwOyAtLWksIGF0ID0gMSAtIGF0KSB7CiAgICAgICAgICAgIGRwW2F0XS5hc3NpZ24oeCArIDEsIDApOwogICAgICAgICAgICBmb3IgKGludCBoYXZlID0gMDsgaGF2ZSA8PSB4OyArK2hhdmUpIHsKICAgICAgICAgICAgICAgIGRvdWJsZSBsZWF2ZSA9IGRwWzEgLSBhdF1baGF2ZV0sIHRha2UgPSAwOwogICAgICAgICAgICAgICAgaWYgKGhhdmUgPj0gY1tpXSkgewogICAgICAgICAgICAgICAgICAgIHRha2UgPSBnZXQocFtpXSkgKiAoc1tpXSArIGRwWzEgLSBhdF1bIGhhdmUgLSBjW2ldIF0pOwogICAgICAgICAgICAgICAgICAgIHRha2UgKz0gKCAxLjAgLSBnZXQocFtpXSkgKSAqIGRwW2F0XVsgaGF2ZSAtIGNbaV0gXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRwW2F0XVtoYXZlXSA9IG1heChsZWF2ZSwgdGFrZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYW5zID0gbWF4KGFucywgZHBbMF1beF0pOwogICAgfSB3aGlsZSAoIG5leHRfcGVybXV0YXRpb24oIG9yZC5iZWdpbigpLCBvcmQuZW5kKCkgKSApOwoKICAgIGNvdXQgPDwgYW5zOwp9CgpzaWduZWQgbWFpbigpIHsKICAgIF8zYmthcm0KCiAgICBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbig4KTsKCiAgICBpbnQgdHMgPSAxOwovLyAgICBjaW4gPj4gdHM7CiAgICB3aGlsZSAodHMtLSkgewogICAgICAgIGdldF9zaGl0X2RvbmUoKTsKICAgIH0KCiAgICByZXR1cm4gMDsKfQ==