#include <bits/stdc++.h>
using namespace std;
using INT = long long;
using VI = vector<int>;
using pii = pair<int, int>;
using pi3 = pair<int, pii>;
template <typename A, typename B>
void smin(A &a, const B &b) {
  if (a > b) a = b;
}
template <typename A, typename B>
void smax(A &a, const B &b) {
  if (a < b) a = b;
}
int arr[101010 << 1], nn;
int first[101010], d[101010], t[101010], p[101010];
vector<pi3> adj[101010 << 1];
priority_queue<pii, vector<pii>, greater<pii> > q;
int dis[101010 << 1];
pii pre[101010 << 1];
int main() {
  int n, L;
  scanf("%d %d", &n, &L);
  arr[nn++] = 0, arr[nn++] = L;
  for (int i = 1; i <= n; i++) {
    scanf("%d %d %d %d", first + i, d + i, t + i, p + i);
    if (p[i] <= first[i]) {
      arr[nn++] = first[i] - p[i], arr[nn++] = first[i] + d[i];
    }
  }
  sort(arr, arr + nn);
  nn = unique(arr, arr + nn) - arr;
  for (int i = 1; i < nn; i++) {
    adj[i].push_back({i + 1, {arr[i] - arr[i - 1], 0}});
    adj[i + 1].push_back({i, {arr[i] - arr[i - 1], 0}});
  }
  for (int i = 1; i <= n; i++)
    if (p[i] <= first[i]) {
      int L = upper_bound(arr, arr + nn, first[i] - p[i]) - arr;
      int R = upper_bound(arr, arr + nn, first[i] + d[i]) - arr;
      adj[L].push_back({R, {p[i] + t[i], i}});
    }
  for (int i = 1; i <= nn; i++) dis[i] = 0x3f3f3f3f;
  q.push({0, 1}), dis[1] = 0;
  while (!q.empty()) {
    int u = q.top().second;
    INT d = q.top().first;
    q.pop();
    if (d > dis[u]) continue;
    for (pi3 p : adj[u]) {
      int v = p.first, w = p.second.first, id = p.second.second;
      if (dis[v] > dis[u] + w) {
        pre[v] = {u, id};
        dis[v] = dis[u] + w;
        q.push({dis[v], v});
      }
    }
  }
  printf("%d\n", dis[nn]);
  VI ans;
  for (int u = nn; u; u = pre[u].first) {
    if (pre[u].second) ans.push_back(pre[u].second);
  }
  printf("%d\n", ans.size());
  for (int i = ans.size(); i--;) printf("%d ", ans[i]);
}
