#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define pt(i) (1<<(i))
#define FOR(i,s,d) for(i=(s);i<(d);++i)
#define f first
#define s second
int cmmdc(int i,int j)
{
while(i&&j)
if(i>=j)
i%=j;
else
j%=i;
return i^j;
}
typedef long long lint;
int n,D,A[pt(16)],par[pt(16)];
lint cmmmc[pt(16)],dt[pt(16)];
pair<int,int> P[16];
void doit(int i)
{
if(i)
{
doit(i^par[i]);
printf("%lld ",dt[par[i]]);
}
}
void baga(int i,int mask,int ask)
{
if(dt[mask]>D) return ;
if(i==n)
{
if(A[ask^mask]+1<A[ask]) A[ask]=A[mask^ask]+1,par[ask]=mask;
return ;
}
baga(i+1,mask,ask);
if(pt(i)&ask)
baga(i+1,mask|pt(i),ask);
}
int main()
{
int i,j,k;
freopen("vanatoare.in","r",stdin);
freopen("vanatoare.out","w",stdout);
scanf("%d %d",&n,&D);
FOR(i,0,n)
scanf("%d %d",&P[i].s,&P[i].f);
sort(P,P+n);
random_shuffle(P,P+n);
//reverse(P,P+n);
cmmmc[0]=1,dt[0]=0;
FOR(i,1,pt(n))
{
A[i]=n+1;
FOR(j,0,n) if(pt(j)&i) break;
k=i^pt(j);
cmmmc[i] = cmmmc[k]/cmmdc(cmmmc[k],P[j].f)*P[j].f;
if(cmmmc[i]>D) cmmmc[i]=D+1;
for(dt[i]=dt[k];dt[i]<=D && dt[i]%P[j].f!=P[j].s;dt[i]+=cmmmc[k]);
baga(0,0,i);
/* for(j=i;j;j=(j-1)&i)
if(dt[j]<=D && A[i]>A[i^j]+1)
A[i]=A[i^j]+1,par[i]=j;*/
}
printf("%d\n",A[pt(n)-1]);
doit(pt(n)-1);
printf("\n");
return 0;
}