#include <bits/stdc++.h>
using namespace std;
constexpr int MAXN = 3e5 + 4;
constexpr int MAXK = 1e3 + 5;
constexpr int MOD = 1e9 + 7;
constexpr long long INF = 9187201950435737471;
constexpr int LOG = 11;
struct edge {
  int u, v, w, ramp;
};
int n, L, m, par[MAXN];
long long dist[MAXN];
bool vis[MAXN];
vector<int> G[MAXN], vc;
vector<pair<long long, pair<int, int> > > tmp;
map<int, int> mp;
edge edg[MAXN];
void dijkstra() {
  priority_queue<pair<long long, pair<int, int> > > PQ;
  PQ.push(make_pair(0, make_pair(1, -1)));
  while (!PQ.empty()) {
    int u = PQ.top().second.first;
    if (!vis[u]) {
      vis[u] = true;
      dist[u] = -PQ.top().first;
      par[u] = PQ.top().second.second;
      for (auto idx : G[u]) {
        int v = edg[idx].u ^ edg[idx].v ^ u, w = edg[idx].w;
        if (vis[v]) {
          continue;
        }
        PQ.push(make_pair(-(w + dist[u]), make_pair(v, idx)));
      }
    }
    PQ.pop();
  }
}
int main() {
  cin >> n >> L;
  for (int i = 1; i <= n; i++) {
    int x, d, t, p;
    cin >> x >> d >> t >> p;
    vc.push_back(x + d);
    if (x - p >= 0) {
      vc.push_back(x - p);
    }
    tmp.push_back(make_pair(t + p, make_pair(x - p, x + d)));
  }
  vc.push_back(0);
  vc.push_back(L);
  sort(vc.begin(), vc.end());
  vc.resize(unique(vc.begin(), vc.end()) - vc.begin());
  n = vc.size();
  for (int i = 0; i < vc.size(); i++) {
    mp[vc[i]] = i + 1;
  }
  for (int i = 1; i < vc.size(); i++) {
    edg[m].u = i;
    edg[m].v = i + 1;
    edg[m].w = vc[i] - vc[i - 1];
    edg[m].ramp = -1;
    G[i].push_back(m);
    G[i + 1].push_back(m);
    m++;
  }
  for (int i = 0; i < tmp.size(); i++) {
    edg[m].u = mp[tmp[i].second.first];
    edg[m].v = mp[tmp[i].second.second];
    edg[m].w = tmp[i].first;
    edg[m].ramp = i + 1;
    G[edg[m].u].push_back(m);
    m++;
  }
  dijkstra();
  cout << dist[n] << "\n";
  int idx = n;
  vector<int> ans;
  while (idx != 1) {
    if (edg[par[idx]].ramp != -1) {
      ans.push_back(edg[par[idx]].ramp);
    }
    idx = edg[par[idx]].u ^ edg[par[idx]].v ^ idx;
  }
  reverse(ans.begin(), ans.end());
  cout << ans.size() << "\n";
  for (auto p : ans) {
    cout << p << " ";
  }
  return 0;
}
