#include <bits/stdc++.h>
using namespace std;
const int size1 = 4e5 + 500;
const long long INF = 1e18;
const long long mod = 1e9 + 7;
const double eps = 1e-5;
inline void solve() {
  int i, j;
  int n, s;
  cin >> n >> s;
  vector<pair<long long, pair<long long, long long> > > v;
  for (i = 1; i <= n; i++) {
    int x, v1, t;
    cin >> x >> v1 >> t;
    v.push_back({x, {t, v1}});
  }
  sort(v.begin(), v.end());
  long long l1 = 0, r1 = 1e12;
  static long long l[size1], r[size1];
  for (int i = 1; i <= 70; i++) {
    long long m = (l1 + r1) / 2;
    for (j = 0; j < n; j++) {
      if (v[j].second.first == 1) {
        if (v[j].first * 1e6 <= v[j].second.second * m) {
          l[j] = 0;
          r[j] = 1e12;
          continue;
        }
        if (v[j].first * 1e6 > (v[j].second.second + s) * m) {
          l[j] = INF;
          r[j] = INF;
          continue;
        } else {
          l[j] = 1e6 * v[j].first;
          long long x = v[j].first;
          long long v1 = v[j].second.second;
          long double t = (1e6 * x - v1 * m) / s;
          long double per = 1e6 * x + (s - v1) * (m - t);
          r[j] = trunc(per);
          r[j] -= r[j] % 1000000;
          if (r[j] > 1e12) {
            r[j] = 1e12;
          }
        }
      } else {
        if (1e6 * (1e6 - v[j].first) <= v[j].second.second * m) {
          l[j] = 0;
          r[j] = 1e12;
          continue;
        }
        if (1e6 * (1e6 - v[j].first) > (v[j].second.second + s) * m) {
          l[j] = INF;
          r[j] = INF;
          continue;
        } else {
          r[j] = 1e6 * v[j].first;
          long long x = v[j].first;
          long long v1 = v[j].second.second;
          long double t = (1e6 * (1e6 - x) - v1 * m) / s;
          long double per = 1e6 * x - (s - v1) * (m - t);
          l[j] = ceil(per);
          if (l[j] % 1000000 != 0) {
            l[j] = l[j] + 1000000 - l[j] % 1000000;
          }
          if (l[j] < 0) {
            l[j] = 0;
          }
        }
      }
    }
    static long long used1[size1], used2[size1], met1[size1], met2[size1];
    vector<pair<long long, pair<int, int> > > v1;
    for (j = 0; j < n; j++) {
      if (v[j].second.first == 1) {
        if (l[j] != INF) {
          v1.push_back({l[j], {1, 1}});
          v1.push_back({r[j] + 1, {2, 1}});
        }
      } else {
        if (l[j] != INF) {
          v1.push_back({l[j], {1, 2}});
          v1.push_back({r[j] + 1, {2, 2}});
        }
      }
    }
    sort(v1.begin(), v1.end());
    bool res = false;
    static int num[size1];
    num[0] = 0;
    int maxnum = -1;
    for (j = 0; j < v1.size(); j++) {
      if (v1[j].first == v1[j - 1].first && j != 0) {
        num[j] = num[j - 1];
      } else {
        num[j] = num[j - 1] + 1;
      }
      if (j == 0) {
        num[j] = 0;
      }
      if (v1[j].second.second == 1) {
        if (v1[j].second.first == 1) {
          used1[num[j]]++;
        } else {
          used1[num[j]]--;
        }
      } else {
        if (v1[j].second.first == 1) {
          used2[num[j]]++;
        } else {
          used2[num[j]]--;
        }
      }
      maxnum = num[j];
    }
    met1[0] = used1[0];
    met2[0] = used2[0];
    if (met1[0] > 0 && met2[0] > 0) {
      res = true;
    }
    for (j = 1; j <= maxnum; j++) {
      met1[j] = met1[j - 1] + used1[j];
      met2[j] = met2[j - 1] + used2[j];
      if (met1[j] > 0 && met2[j] > 0) {
        res = true;
      }
    }
    for (j = 0; j <= maxnum; j++) {
      used1[j] = 0;
      used2[j] = 0;
      met1[j] = 0;
      met2[j] = 0;
    }
    if (res) {
      r1 = m;
    } else {
      l1 = m;
    }
  }
  cout << r1 / ((size1 - 500) / 4 * 10) << '.';
  long long per = r1 % ((size1 - 500) / 4 * 10);
  int kol = 0;
  long long per1 = per;
  while (per != 0) {
    per /= 10;
    kol++;
  }
  for (i = 1; i <= 6 - kol; i++) {
    cout << 0;
  }
  cout << per1;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  solve();
  return 0;
}
