#include <bits/stdc++.h>
using namespace std;
struct Counter {
  static int k;
  Counter() { k++; }
  ~Counter() { k--; }
};
int Counter::k = 0;
template <typename T>
void pr(const string& name, T t) {
  cout << name << " = " << t << endl;
}
template <typename T, typename... Types>
void pr(const string& names, T t, Types... rest) {
  auto comma_pos = names.find(',');
  cout << names.substr(0, comma_pos) << " = " << t << ", ";
  auto next_name_pos = names.find_first_not_of(" \t\n", comma_pos + 1);
  pr(string(names, next_name_pos), rest...);
}
void mod(long long& a, long long b) {
  a %= b;
  if (a < 0) a += b;
}
const long long MOD = 1000000007;
const double INF = 9999999999;
double DP[1005], L, X[1005];
int N, From[1005], P[1005];
double dist(double a, double b) { return sqrt(abs(a - b - L)); }
bool ok(double r) {
  for (int i = (1); i <= (N); i++) {
    DP[i] = INF * 1000000;
    for (int j = (0); j <= (i - 1); j++)
      if (DP[j] - P[i] * r + dist(X[i], X[j]) < DP[i]) {
        DP[i] = DP[j] - P[i] * r + dist(X[i], X[j]);
        From[i] = j;
      }
  }
  return DP[N] < 0;
}
int main() {
  cin >> N >> L;
  for (int i = (1); i <= (N); i++) cin >> X[i] >> P[i];
  double a = 0, b = INF;
  for (int i = (0); i <= (100); i++) {
    double p = (a + b) / 2;
    if (ok(p))
      b = p;
    else
      a = p;
  }
  int n = N;
  vector<int> v;
  while (n > 0) {
    v.push_back(n);
    n = From[n];
  }
  reverse(v.begin(), v.end());
  for (int k : v) cout << k << " ";
}
