#include <bits/stdc++.h>
using namespace std;
int n, L;
vector<int> all_coords;
struct Tramplin {
  int x, d, t, p;
  void scan() { scanf("%d%d%d%d", &x, &d, &t, &p); }
};
struct Edge {
  int v, dst;
  int tr;
  Edge(int v, int dst, int tr) : v(v), dst(dst), tr(tr) {}
};
vector<Tramplin> tramplins;
vector<vector<Edge> > sm;
vector<int> pred_v;
vector<int> pred_tr;
vector<int> dst;
int getNum(int x) {
  return lower_bound(all_coords.begin(), all_coords.end(), x) -
         all_coords.begin();
}
int main() {
  scanf("%d%d", &n, &L);
  tramplins.resize(n);
  for (int i = 0; i < n; ++i) {
    tramplins[i].scan();
    all_coords.push_back(tramplins[i].x - tramplins[i].p);
    all_coords.push_back(tramplins[i].x + tramplins[i].d);
  }
  all_coords.push_back(0);
  all_coords.push_back(L);
  sort(all_coords.begin(), all_coords.end());
  all_coords.erase(unique(all_coords.begin(), all_coords.end()),
                   all_coords.end());
  sm.resize(all_coords.size());
  for (int i = 0; i < n; ++i) {
    sm[getNum(tramplins[i].x - tramplins[i].p)].push_back(
        Edge(getNum(tramplins[i].x + tramplins[i].d),
             tramplins[i].p + tramplins[i].t, i));
  }
  for (int i = 1; i < all_coords.size(); ++i)
    if (all_coords[i - 1] >= 0) {
      int delta = all_coords[i] - all_coords[i - 1];
      sm[i - 1].push_back(Edge(i, delta, -1));
      sm[i].push_back(Edge(i - 1, delta, -1));
    }
  n = all_coords.size();
  set<pair<int, int> > dst_set;
  dst.resize(n);
  pred_v.resize(n);
  pred_tr.resize(n);
  for (int i = 0; i < n; ++i) dst[i] = L + 1;
  dst[getNum(0)] = 0;
  dst_set.insert(make_pair(0, getNum(0)));
  while (!dst_set.empty()) {
    int u = dst_set.begin()->second;
    int d = dst_set.begin()->first;
    dst_set.erase(dst_set.begin());
    if (d != dst[u]) continue;
    for (int i = 0; i < sm[u].size(); ++i) {
      int v = sm[u][i].v;
      int delta = sm[u][i].dst;
      if (d + delta < dst[v]) {
        dst[v] = d + delta;
        pred_v[v] = u;
        pred_tr[v] = sm[u][i].tr;
        dst_set.insert(make_pair(dst[v], v));
      }
    }
  }
  int u = getNum(L);
  printf("%d\n", dst[u]);
  vector<int> result;
  while (all_coords[u] != 0) {
    if (pred_tr[u] != -1) result.push_back(pred_tr[u]);
    u = pred_v[u];
  }
  printf("%d\n", (int)result.size());
  for (int i = result.size() - 1; i >= 0; --i) printf("%d ", result[i] + 1);
  printf("\n");
  return 0;
}
