#include <bits/stdc++.h>
using ll = long long;
using ld = long double;
using ull = unsigned long long;
using namespace std;
const int N = 1e5 + 4;
int n, x[N], p[N], d[N], t[N], L, pos[2 * N], num_ver, trace[2 * N];
ll dist[2 * N];
pair<int, int> id[2 * N];
pair<bool, int> jump[2 * N];
vector<pair<pair<int, int>, int> > a[2 * N];
vector<int> c, res;
void dijsktra() {
  priority_queue<pair<int, int> > pq;
  pq.push({0, 1});
  fill(dist + 1, dist + 1 + num_ver, 1e18);
  dist[1] = 0;
  while (!pq.empty()) {
    int u = pq.top().second;
    ll du = pq.top().first;
    du = -du;
    pq.pop();
    if (u == num_ver) break;
    if (du != dist[u]) continue;
    for (auto& v : a[u]) {
      if (dist[v.first.first] > du + v.first.second) {
        dist[v.first.first] = du + v.first.second;
        trace[v.first.first] = u;
        jump[v.first.first].first = 0;
        if (v.second) jump[v.first.first] = {1, v.second};
        pq.push({-dist[v.first.first], v.first.first});
      }
    }
  }
  cout << dist[num_ver] << '\n';
  for (int u = num_ver; u != 1; u = trace[u])
    if (jump[u].first) res.push_back(jump[u].second);
  cout << ((int)(res).size()) << '\n';
  for (int i = (((int)(res).size()) - 1); i >= (0); --i) cout << res[i] << ' ';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n >> L;
  for (int i = (1); i <= (n); ++i) {
    cin >> x[i] >> d[i] >> t[i] >> p[i];
    if (x[i] - p[i] >= 0) {
      c.push_back(x[i] - p[i]);
      c.push_back(x[i] + d[i]);
    }
  }
  c.push_back(0);
  c.push_back(L);
  sort((c).begin(), (c).end());
  c.erase(unique((c).begin(), (c).end()), c.end());
  for (int i = (1); i <= (n); ++i) {
    if (x[i] - p[i] < 0) continue;
    int idl_ver =
        lower_bound((c).begin(), (c).end(), x[i] - p[i]) - c.begin() + 1;
    int idr_ver =
        lower_bound((c).begin(), (c).end(), x[i] + d[i]) - c.begin() + 1;
    id[i] = {idl_ver, idr_ver};
    pos[idl_ver] = x[i] - p[i];
    pos[idr_ver] = x[i] + d[i];
  }
  num_ver = ((int)(c).size());
  pos[num_ver] = L;
  for (int i = (2); i <= (num_ver); ++i) {
    a[i].push_back({{i - 1, pos[i] - pos[i - 1]}, 0});
    a[i - 1].push_back({{i, pos[i] - pos[i - 1]}, 0});
  }
  for (int i = (1); i <= (n); ++i) {
    if (x[i] - p[i] < 0) continue;
    a[id[i].first].push_back({{id[i].second, p[i] + t[i]}, i});
  }
  dijsktra();
}
