/*
输出m个数字，其中第i个要输出从0变换到i的最小步骤，步骤按照输入的n个操作任选
暴力：n次操作，每次枚举已到达的数（包括0）做操作，用桶数组记录操作
优化：
   贪心：每次从m到0开始操作，如果已经操作过，就退出
   或者每次从0到m，每个数就操作一次，因为循环到后面还会操作到
   要注意a<=y的判断
复杂度O(n*m)
*/
#include <iostream>
#include <cstdio>
#include <map>
#include <vector>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
using namespace std;
typedef long long ll;
struct Cmd {
  ll t, x, y;
};

const int N=205, M=1e5+5, inf=0x3f3f3f3f;
int n,m, d[M],a[M];
Cmd cmd[N];

void solve() {
  for(int i=1; i<=m; i++) d[i] = -1;
  d[0] = 0;
  for(int i=1; i<=n; i++) {
    memset(a, 0, sizeof(a));
    for(int j=0; j<=m; j++) {
      if(d[j]==-1) continue;
      ll dest;
      if(cmd[i].t == 1) {
        ll tmp = (cmd[i].x+99999)/100000;
        dest = j+tmp;
      } else {
        double tmp = cmd[i].x*1.0/100000;
        dest = j*tmp+0.9999999999L;
      }
	  if(dest > m || dest < 0) break;//数据超出
	  if(a[j]+1 > cmd[i].y) continue;//超出y的限制
	  if(d[dest] == -1) {
		d[dest] = i;
		a[dest] = a[j]+1;
	  }
    }
  }
  for(int i=1; i<=m; i++)
    printf("%d ", d[i]);
  cout<<endl;
}

int main() {
  cin>>n>>m;
  for(int i=1; i<=n; i++)
    cin>>cmd[i].t>>cmd[i].x>>cmd[i].y;
  solve();
  
  return 0;
}
