#include <bits/stdc++.h>
using namespace std;
int n, l, c[200005], f[200005], v[500005], o[500005], x[500005], p, k, t,
    X[200005], Y[200005], Z[200005], w[500005], d[200005], E[200005], L[200005],
    A;
priority_queue<pair<int, int> > q;
int main() {
  scanf("%d %d", &n, &l);
  c[k++] = 0;
  c[k++] = l;
  for (int i = 1, a, b, r, d; i <= n; i++) {
    scanf("%d %d %d %d", &a, &b, &r, &d);
    X[i] = a - d;
    Y[i] = a + b;
    Z[i] = r + d;
    if (X[i] < 0 || b <= r) continue;
    c[k++] = X[i];
    c[k++] = Y[i];
  }
  sort(c, c + k);
  for (int i = 0, j = -1; i < k;) {
    while (i < k && j >= c[i]) i++;
    if (i < k) {
      d[t] = 2e9;
      if (t)
        v[++p] = t, o[p] = f[t - 1], f[t - 1] = p, w[p] = c[i] - j, x[p] = 0,
        v[++p] = t - 1, o[p] = f[t], f[t] = p, w[p] = c[i] - j, x[p] = 0;
      j = c[t++] = c[i];
    }
  }
  for (int i = 1, a, b; i <= n; i++) {
    if (X[i] < 0 || Y[i] - X[i] <= Z[i]) continue;
    a = lower_bound(c, c + t, X[i]) - c;
    b = lower_bound(c, c + t, Y[i]) - c;
    v[++p] = a, o[p] = f[b], f[b] = p, w[p] = Z[i], x[p] = i;
  }
  d[t - 1] = 0;
  q.push(make_pair(0, t - 1));
  for (int V; !q.empty();) {
    V = q.top().second;
    q.pop();
    if (d[V] >= d[0]) break;
    for (int j = f[V], y; j; j = o[j])
      if (d[y = v[j]] > d[V] + w[j]) {
        d[y] = d[E[y] = V] + w[L[y] = j];
        q.push(make_pair(-d[y], y));
      }
  }
  printf("%d\n", d[0]);
  for (int i = 0; i != t - 1; i = E[i])
    if (x[L[i]]) A++;
  printf("%d\n", A);
  for (int i = 0, F = 0; i != t - 1; i = E[i])
    if (x[L[i]]) {
      if (F) printf(" ");
      printf("%d", x[L[i]]);
      F = 1;
    }
  if (A) printf("\n");
}
