#include <bits/stdc++.h>
using namespace std;
const int M = 1e6 + 5;
int n, L;
int pre[M];
double dp[M];
struct node {
  int x, y;
};
node a[M];
bool check(double mid) {
  for (int i = 1; i <= n; i++) dp[i] = 1e19;
  dp[0] = 0.00;
  for (int i = 0; i <= n; i++) {
    for (int j = i + 1; j <= n; j++) {
      double tmp = sqrt(abs(a[j].x - a[i].x - L)) + dp[i] - a[j].y * mid;
      if (dp[j] > tmp) {
        dp[j] = tmp;
        pre[j] = i;
      }
    }
  }
  if (dp[n] >= 0)
    return 1;
  else
    return 0;
}
void find(int z) {
  if (!z) return;
  find(pre[z]);
  printf("%d ", z);
  return;
}
int main() {
  scanf("%d %d", &n, &L);
  for (int i = 1; i <= n; i++) {
    scanf("%d %d", &a[i].x, &a[i].y);
  }
  double l = 0, r = 1e6, mid;
  while (abs(r - l) > 1e-9) {
    mid = (l + r) / 2.0;
    if (check(mid)) {
      l = mid;
    } else {
      r = mid;
    }
  }
  find(n);
  return 0;
}
