#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <cstdint>
#include <list>
#include <map>
#include <numeric>
#include<queue>
#include<set>
#include <unordered_set>
#include <sstream>
#include<stack>
using namespace std;
int main() {
int64_t n, h;
cin >> n >> h;
while (n--) {
int64_t x, y, z;
cin >> x >> y >> z;
//x-i/i = -(z-h)/h,其他的同理
// 计算经过反射后到达目标的坐标
int64_t i = h * x; // x坐标的反射
int64_t j = h * y; // y坐标的反射
int64_t k = h * (2 * h - z); // z坐标的反射
// 计算最大公约数,用于化简坐标
int64_t gcd_val = gcd(i, gcd(j, k));
// 化简坐标
i /= gcd_val;
j /= gcd_val;
k /= gcd_val;
// 输出反射后的坐标
cout << i << " " << j << " " << k << endl;
}
return 0;
}