#include #include #include #define N 111 int n,need; int V[N],D[N]; int match[N],visit[N]; struct Eage{ int to,next; }eage[N*N]; int tot,head[N]; void add(int a,int b){ eage[tot].to=b;eage[tot].next=head[a];head[a]=tot++; } int dfs(int k) { int j,v; for(j=head[k];j!=-1;j=eage[j].next) { v=eage[j].to; if(visit[v]) continue; visit[v]=1; if(k*need+D[v]>V[v]) continue; if(match[v]==-1 || dfs(match[v])) { match[v]=k; return 1; } } return 0; } int main() { int i,l; int flag; while(scanf("%d%d",&n,&need)!=-1) { for(i=1;i<=n;i++) scanf("%d%d",&V[i],&D[i]); tot=0; memset(head,-1,sizeof(head)); for(i=1;i<=n;i++)for(l=1;l<=n;l++) add(i,l); flag=0; memset(match,-1,sizeof(match)); for(i=1;i<=n;i++) { memset(visit,0,sizeof(visit)); if(!dfs(i)) {flag=1;break;} } if(flag) {printf("The zombies eat your brains!\n");continue;} for(i=1;i<=n;i++) if(match[i]==1) {printf("%d",i);break;} for(i=2;i<=n;i++) for(l=1;l<=n;l++) if(match[l]==i) {printf(" %d",l);break;} printf("\n"); } return 0; }