#include using namespace std; void chmax(double &a, double b) {if(a < b) a = b;} int main() { int N, X, Y; cin >> N >> X >> Y; vector W(N), V(N), C(N); for(int i = 0; i < N; ++i) cin >> W[i] >> V[i] >> C[i]; vector> vec; for(int i = 0; i < N; ++i) { while(C[i] > 0) { do { vec.emplace_back(W[i], V[i]); C[i] -= 1; } while(C[i] % 2 == 1); W[i] *= 2, V[i] *= 2, C[i] /= 2; } } cout << fixed << setprecision(15); auto check = [&](double A) { vector dp(X, -1e18); for(auto [w, v] : vec) { v -= w * A; v += w / X * Y; w %= X; auto ndp = dp; for(int i = 0; i < X; ++i) { int ni = i + w; chmax(ndp[ni % X], dp[i] + v + (ni < X ? 0 : Y)); } chmax(ndp[w], v); swap(dp, ndp); } for(auto x : dp) if(x >= 0) return true; return false; }; double ok = 0, ng = 1e6; for(int _ = 0; _ < 50; ++_) { double mid = (ok + ng) / 2; (check(mid) ? ok : ng) = mid; } cout << ok << "\n"; }