#include <bits/stdc++.h>
using namespace std;
int n, l;
vector<pair<int, int> > v;
vector<int> g[1005];
vector<double> w[1005];
double dis[1005];
int parent[1005];
vector<int> r;
void calc_distance(void) {
  int viz;
  for (int i = 1; i <= n; i++) {
    dis[i] = 0x3f3f3f3f;
  }
  parent[0] = -1;
  dis[0] = 0;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < (int)g[i].size(); j++) {
      viz = g[i][j];
      if (dis[viz] > dis[i] + w[i][j]) {
        parent[viz] = i;
        dis[viz] = dis[i] + w[i][j];
      }
    }
  }
  return;
}
void build_graph(double ratio) {
  int viz;
  for (int i = 0; i <= n; i++) {
    for (int j = 0; j < (int)g[i].size(); j++) {
      viz = g[i][j];
      w[i][j] =
          sqrt(abs(l - (v[viz].first - v[i].first))) - ratio * v[viz].second;
    }
  }
  return;
}
int main(void) {
  int x, b;
  double low, high, mid;
  double best;
  int pos;
  scanf(" %d %d", &n, &l);
  v.push_back(make_pair(0, 0));
  for (int i = 1; i <= n; i++) {
    scanf(" %d %d", &x, &b);
    v.push_back(make_pair(x, b));
  }
  for (int i = 0; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      g[i].push_back(j);
      w[i].push_back(0);
    }
  }
  low = 0;
  high = 0x3f3f3f3f;
  best = -1;
  while (high - low >= 1e-8) {
    mid = (low + high) / 2.0;
    build_graph(mid);
    calc_distance();
    if (dis[n] <= 0) {
      best = mid;
      high = mid;
    } else {
      low = mid;
    }
  }
  build_graph(best);
  calc_distance();
  pos = n;
  while (parent[pos] != -1) {
    r.push_back(pos);
    pos = parent[pos];
  }
  reverse(r.begin(), r.end());
  for (int i = 0; i < (int)r.size(); i++) {
    if (i != 0) {
      printf(" ");
    }
    printf("%d", r[i]);
  }
  return 0;
}
