#include <bits/stdc++.h>
using namespace std;
string itosm(long long x) {
  if (x == 0) return "0";
  string ans = "";
  while (x > 0) {
    ans += ((x % 10) + '0');
    x /= 10;
  }
  reverse(ans.begin(), ans.end());
  return ans;
}
long long stoim(string str) {
  long long ans = 0;
  long long k = 1;
  for (int i = str.length() - 1; i >= 0; i--) {
    ans += (str[i] - '0') * k;
    k *= 10;
  }
  return ans;
}
const long long infll = 1e18 + 3;
const int inf = 1009000999;
const double eps = 1e-7;
const int maxn = 1e5 + 10000;
const int baseint = 1000200013;
const long long basell = 1e18 + 3;
const long double PI = acos(-1.0);
const long long mod = 1e9 + 1;
long double s, n;
long double x[maxn], v[maxn], t[maxn];
vector<pair<long double, pair<int, int> > > q;
bool check(long double time) {
  q.clear();
  for (int i = (0); i < (n); i++) {
    if (t[i] == 1) {
      if (1.0 * x[i] / (s + v[i]) <= time) {
        long double tt = (time - ((x[i] - v[i] * time) / s));
        if (x[i] - v[i] * time < 0) {
          q.push_back(make_pair(-1, make_pair(-1, 0)));
          q.push_back(make_pair(1e6 + 1, make_pair(1, 0)));
          continue;
        }
        q.push_back(make_pair(x[i], make_pair(-1, 0)));
        q.push_back(make_pair(max(x[i], ceil(x[i] - tt * v[i] + tt * s) - 1),
                              make_pair(1, 0)));
      }
    } else {
      if (1.0 * (1000000 - x[i]) / (s + v[i]) <= time) {
        long double tt = (time - ((1000000 - x[i] - v[i] * time) / s));
        if (1000000 - x[i] - v[i] * time < 0) {
          q.push_back(make_pair(-1, make_pair(0, -1)));
          q.push_back(make_pair(1e6 + 1, make_pair(0, 1)));
          continue;
        }
        q.push_back(make_pair(min(x[i], ceil(x[i] + tt * v[i] - tt * s)),
                              make_pair(0, -1)));
        q.push_back(make_pair(x[i], make_pair(0, 1)));
      }
    }
  }
  sort(q.begin(), q.end());
  pair<int, int> a = {0, 0};
  while (q.size() > 0) {
    a.first += q.back().second.first;
    a.second += q.back().second.second;
    if (a.second > 0 && a.first > 0) return 1;
    q.pop_back();
  }
  return 0;
}
void solve() {
  cin >> n >> s;
  for (int i = (0); i < (n); i++) {
    cin >> x[i] >> v[i] >> t[i];
  }
  long double l = 0, r = 5e5, m;
  while (r - l > eps) {
    m = (l + r) / 2;
    if (check(m))
      r = m;
    else
      l = m;
  }
  cout << fixed << setprecision(20) << l;
}
int main() {
  srand(time(0));
  ios_base::sync_with_stdio(0);
  ;
  solve();
  return 0;
}
