#include <bits/stdc++.h>
using namespace std;
/*
5 20
10 10
20 40
30 10
40 20
50 30
*/
void grafir(vector<vector<int>> a)
{
cout<<endl;
cout<<"sorok szama"<<a.size()<<endl;
for(int i=0;i<a.size();i++)
{
for(int j=0;j<a.at(i).size();j++)
cout<<a.at(i).at(j)<<"\t";
cout<<endl;
}
cout<<endl;
}
void dij(vector<vector<int>> g, int start, vector<int> &kapcs, vector<int> &nagyok)
/*
g-szomszedsagi matrix, a csucsok jelolese 1-tol indul
start az indulo csucs
kapcs-kimeno vector megmutatja h melyik csucsba honnan jutunk
aprok-kimeno vector minden csucshoz megmutatja hogy mennyia legrovedebb ut koltsege
olyan vectorrl hivjuk meg amiben NAGY kezdoertekek vannak
*/
{
int nn=g.size();
vector<int> kesz(nn), maxok(nn);
kapcs.at(start)=-1;
maxok.at(start)=0;
int akt=start;
int hanyadik=0;
while (hanyadik<nn)
{
for(int i=1;i<nn;i++)
if(g.at(akt).at(i)!=0 && !kesz.at(i) && nagyok.at(i)<nagyok.at(akt)+g.at(akt).at(i))
{
maxok.at(i)=g.at(akt).at(i)+maxok.at(akt);
kapcs.at(i)=akt;
}
kesz.at(akt)=1;
int nagy=maxok.at(0), nagyindex=0;
for(int i=0;i<nn-1;i++)
if (maxok.at(i)>nagy && kesz.at(i)==0)
{
nagy=maxok.at(i);
nagyindex=i;
}
akt=nagyindex;
hanyadik++;
}
nagyok=maxok;
}
void utkeres(int start, int hova, vector<int> kapcs, vector<int> &lista)
{
if(kapcs.at(hova)==-1)
{
lista.push_back(start);
return;
}
else
{
utkeres(start, kapcs.at(hova),kapcs, lista);
lista.push_back(hova);
}
}
int main()
{
int n, k;
cin>>n>>k;
vector<pair<int,int>> kutak(n+2);
for(int i=1;i<n+1;i++)
cin>>kutak.at(i).first>>kutak.at(i).second;
kutak.at(n+1).first=kutak.at(n).first+k+10;
kutak.at(n+1).second=0;
/*
for(pair<int,int> x:kutak)
cout<<x.first<<" " <<x.second<<endl;
*/
int meret=n+2;
vector<vector<int>> graf(n+2);
for(int i=0;i<n+2;i++)
graf.at(i).resize(n+2);
for( int i=1;i<kutak.size();i++)
{
for(int j=i+1; j<n+2;j++)
if (kutak.at(j).first-kutak.at(i).first>=k)
{
graf.at(i).at(j)=kutak.at(i).second;
}
}
//grafir(graf);
vector <int> nagyprofit(n+2,-10);
vector <int> kapcsolat (n+2);
int jo=-100, joindex=0;
for(int i=1;i<n;i++)
{
dij(graf,i, kapcsolat, nagyprofit);
/*cout<<kutak.at(i).first<< "-es kut: \n";
cout<<"Profit: \n";
for(int x: nagyprofit)
cout<<x<<" ";
cout<<endl;
cout<<"kapcsolati vector: \n";
for(int x: kapcsolat)
cout<<x<<" ";
cout<<endl;*/
if (nagyprofit.at(n+1)>jo)
{
jo=nagyprofit.at(n+1);
joindex=i;
}
}
dij(graf, joindex, kapcsolat, nagyprofit);
vector<int> ut;
utkeres(joindex,n+1,kapcsolat,ut);
cout<</*"A legnagyobb profit: "<<*/jo<<endl;
cout<<ut.size()-1<<" ";
for(int i=0;i<ut.size()-1;i++)
cout<<ut.at(i)<<" ";
return 0;
}