#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <unordered_set>
#include <unordered_map>
#include <memory>
#include <limits>

using namespace std;

#define INF 0x7fffffff
#define MAXN 5
int mat[MAXN][MAXN];


void leftblank(int row, int col)
{
	int start = col;
	while(mat[row][start] != 0) //find zero
		start++;
	for (int i = start + 1; i < 4; ++i) //remove
		if (mat[row][i] != 0)
			swap(mat[row][start++], mat[row][i]);
}

void left()
{
	for (int i = 0; i < 4; ++i)
	{
		leftblank(i, 0);
		for (int j = 0; j < 3; ++j) 
		{
			if (mat[i][j] == 0) break;
			else if (mat[i][j] == mat[i][j + 1])
			{
				mat[i][j] += mat[i][j + 1];
				mat[i][j + 1] = 0;
				leftblank(i, j + 1);
			}
		}
	}
}

void rightblank(int row, int col)
{
	int start = col;
	while (mat[row][start] != 0) //find zero
		start--;
	for (int i = start - 1; i >= 0; --i) //remove
		if (mat[row][i] != 0)
			swap(mat[row][start--], mat[row][i]);
}

void right()
{
	for (int i = 0; i < 4; ++i)
	{
		rightblank(i, 3);
		for (int j = 3; j > 0; --j)
		{
			if (mat[i][j] == 0) break;
			else if (mat[i][j] == mat[i][j - 1])
			{
				mat[i][j] += mat[i][j-1];
				mat[i][j-1] = 0;
				rightblank(i, j-1);
			}
		}
	}
}

void upblank(int row, int col)
{
	int start = row;
	while (mat[start][col] != 0) //find zero
		start++;
	for (int i = start + 1; i < 4; ++i) //remove
		if (mat[i][col] != 0)
			swap(mat[start++][col], mat[i][col]);
}

void up()
{
	for (int j = 0; j < 4; ++j)
	{
		upblank(0, j);
		for (int i = 0; i < 3; ++i)
		{
			if (mat[i][j] == 0) break;
			else if (mat[i][j] == mat[i+1][j])
			{
				mat[i][j] += mat[i+1][j];
				mat[i+1][j] = 0;
				upblank(i + 1, j);
			}
		}
	}
}

void downblank(int row, int col)
{
	int start = row;
	while (mat[start][col] != 0) //find zero
		start--;
	for (int i = start - 1; i >= 0; --i) //remove
		if (mat[i][col] != 0)
			swap(mat[start--][col], mat[i][col]);
}

void down()
{
	for (int j = 0; j < 4; ++j)
	{
		downblank(3, j);
		for (int i = 3; i > 0; --i)
		{
			if (mat[i][j] == 0) break;
			else if (mat[i][j] == mat[i - 1][j])
			{
				mat[i][j] += mat[i - 1][j];
				mat[i - 1][j] = 0;
				downblank(i - 1, j);
			}
		}
	}
}


int _tmain(int argc, TCHAR *argv[])
{
	for (int i = 0; i < 4; ++i)
		for (int j = 0; j < 4; ++j)
			cin >> mat[i][j];
	int d;
	cin >> d;
	switch (d)
	{
	case 0:
		left();
		break;
	case 1:
		up();
		break;
	case 2:
		down();
		break;
	case 3:
		right();
		break;
	default:
		break;
	}

	for (int i = 0; i < 4; ++i) {
		for (int j = 0; j < 4; ++j)
			printf("%d", mat[i][j]);
		printf("\n");
	}

	getchar();
	return 0;
}