#include <bits/stdc++.h>
using namespace std;
int N, S;
long long P[1000005];
vector<pair<int, int> > V[2];
vector<pair<int, int> > Range[2];
const double eps = 0.0000001;
const int rightLimit = 1000000;
void Read() {
  scanf("%d%d", &N, &S);
  for (int i = 1; i <= N; i++) {
    int x, v, t;
    scanf("%d%d%d", &x, &v, &t);
    --t;
    V[t].push_back(make_pair(x, v));
  }
  Range[0].resize(V[0].size());
  Range[1].resize(V[1].size());
}
int maxCoord(int x, int v, double T) {
  double coord = ((T / S) * (S + v) * (S - v)) + 1.0 * x * v / S;
  if (coord > rightLimit) coord = rightLimit;
  return (int)(coord + eps);
}
bool check(double T) {
  for (int i = 0; i <= rightLimit; i++) P[i] = 0;
  for (int i = 0; i < V[0].size(); i++) {
    int x = V[0][i].first, v = V[0][i].second;
    if ((double)x / (double)v <= T) {
      Range[0][i] = make_pair(0, rightLimit);
      P[0]++;
      P[rightLimit + 1]--;
    } else {
      Range[0][i] = make_pair(x, maxCoord(x, v, T));
      if (Range[0][i].first > Range[0][i].second) {
        Range[0][i] = make_pair(-1, -1);
      } else {
        P[Range[0][i].first]++;
        P[Range[0][i].second + 1]--;
      }
    }
  }
  for (int i = 1; i <= rightLimit; i++) P[i] += P[i - 1];
  for (int i = 1; i <= rightLimit; i++) P[i] += P[i - 1];
  for (int i = 0; i < V[1].size(); i++) {
    int x = V[1][i].first, v = V[1][i].second;
    x = rightLimit - x;
    if ((double)x / (double)v <= T) {
      Range[1][i] = make_pair(0, rightLimit);
      if (P[rightLimit] > 0) return true;
    } else {
      Range[1][i] = make_pair(x, maxCoord(x, v, T));
      if (Range[1][i].first > Range[1][i].second) {
        Range[1][i] = make_pair(-1, -1);
      } else {
        Range[1][i] =
            make_pair(rightLimit - Range[1][i].second, rightLimit - x);
        int secondVal = Range[1][i].first > 0 ? P[Range[1][i].first - 1] : 0;
        if (P[Range[1][i].second] - secondVal > 0) return true;
      }
    }
  }
  return false;
}
void Solve() {
  double left = 0, right = 1000000, mid, sol = right;
  int steps = 0;
  while (left <= right && steps <= 60) {
    ++steps;
    mid = (left + right) / 2.0;
    if (check(mid)) {
      sol = mid;
      right = mid;
    } else {
      left = mid;
    }
  }
  cout << fixed << setprecision(15) << sol << '\n';
}
int main() {
  Read();
  Solve();
  return 0;
}
