#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
struct point
{
int year, month, day;
int cnt;
point (int year = 0, int month = 0, int day = 0, int cnt = 0): year(year), month(month), day(day), cnt(cnt){}
};
point a[10000];
int n;
int cnt;
int d1[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int d2[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool check(int x)
{
if (x % 400 == 0 || (x % 4 == 0 && x % 100 != 0)) return true;
return false;
}
void init()
{
cnt = 1;
int day = 1;
for (int i = 1753; i <= 1753 + 399; i++)
{
bool flag = false;
flag = check(i);
for (int j = 1; j <= 12; j++){
int tmp = (flag == 1 ? d2[j] : d1[j]);
while (day <= tmp){
if (day == 1 || day == 11 || day == 21)
{
a[cnt] = point(i, j, day, cnt);
cnt++;
}
day += 7;
}
day -= tmp;
}
}
}
int main()
{
init();
cnt--;
int t;
scanf("%d", &t);
while (t--){
int y, m, d;
scanf("%d%d%d", &y, &m ,&d);
int n;
scanf("%d", &n);
n--;
int ind = n / cnt;
int tmp = n - ind * cnt;
int mid = 0;
while (y >= 1753 + 400)
{
y -= 400;
mid++;
}
//printf("y = %d mid = %d tmp = %d\n", y, mid, tmp);
ll t1 = 0, t2 = 0, t3 = 0;
for (int i = 1; i <= cnt; i++){
if (y == a[i].year && m == a[i].month && d == a[i].day){
int g = i;
g += tmp;
while (g > cnt){
g -= cnt;
mid++;
}
t1 = (ll)a[g].year + (ll)(mid + ind) * 400;
t2 = (ll)a[g].month;
t3 = (ll)a[g].day;
break;
}
}
printf("%lld %lld %lld\n", t1, t2, t3);
}
return 0;
}