{
TASK: expres
LANG: PASCAL
}
program express;

const
	MAXN					= 40;
	MAXK					= 40;
	inf					= -99999999;

type
	Integer					= LongInt;
	TDigit					= Array [1 .. 5] of String;
	TDiff					= record
		k, n				: Integer;
	end;
	TDPResult				= record
		s, d				: Integer;
	end;
	TDPBack					= record
		i, j, x				: Integer;
	end;

var
	t					: Array [0 .. 11, 0 .. 11] of TDiff;
	izr					: Array [1 .. MAXN * 2] of Integer;
	dp					: Array [1 .. MAXN, 0 .. MAXK, -MAXK .. MAXK] of Integer;
	dpb					: Array [1 .. MAXN, 0 .. MAXK, -MAXK .. MAXK] of TDPBack;
	dpr					: Array [1 .. MAXN, 0 .. MAXK, -MAXK .. MAXK] of TDPResult;
	d					: Array [0 .. 11] of TDigit;
	res					: Array [1 .. 5] of AnsiString;
	s					: Array [1 .. 5] of AnsiString;
	n, k, i					: Integer;

procedure Init;
begin
	d[0][1] := '111';
	d[0][2] := '101';
	d[0][3] := '101';
	d[0][4] := '101';
	d[0][5] := '111';

	d[1][1] := '001';
	d[1][2] := '001';
	d[1][3] := '001';
	d[1][4] := '001';
	d[1][5] := '001';

	d[2][1] := '111';
	d[2][2] := '001';
	d[2][3] := '111';
	d[2][4] := '100';
	d[2][5] := '111';

	d[3][1] := '111';
	d[3][2] := '001';
	d[3][3] := '111';
	d[3][4] := '001';
	d[3][5] := '111';

	d[4][1] := '101';
	d[4][2] := '101';
	d[4][3] := '111';
	d[4][4] := '001';
	d[4][5] := '001';

	d[5][1] := '111';
	d[5][2] := '100';
	d[5][3] := '111';
	d[5][4] := '001';
	d[5][5] := '111';

	d[6][1] := '111';
	d[6][2] := '100';
	d[6][3] := '111';
	d[6][4] := '101';
	d[6][5] := '111';

	d[7][1] := '111';
	d[7][2] := '001';
	d[7][3] := '001';
	d[7][4] := '001';
	d[7][5] := '001';

	d[8][1] := '111';
	d[8][2] := '101';
	d[8][3] := '111';
	d[8][4] := '101';
	d[8][5] := '111';

	d[9][1] := '111';
	d[9][2] := '101';
	d[9][3] := '111';
	d[9][4] := '001';
	d[9][5] := '111';

	d[10][1] := '000';
	d[10][2] := '010';
	d[10][3] := '111';
	d[10][4] := '010';
	d[10][5] := '000';

	d[11][1] := '000';
	d[11][2] := '000';
	d[11][3] := '111';
	d[11][4] := '000';
	d[11][5] := '000';
end;

procedure readInput;
begin
	readln(n, k);
	for i := 1 to 5 do
		readln(s[i]);
end;

procedure Transform;
var
	i, j, x, y, n1, n2				: Integer;
begin
	for i := 0 to 11 do
		for j := 0 to 11 do begin
			t[i, j].k := 0;
			t[i, j].n := 0;
			n1 := 0;
			n2 := 0;
			for x := 1 to 5 do
				for y := 1 to 3 do begin
					if (d[i][x][y] <> d[j][x][y]) then
						inc(t[i, j].k);
					if (d[i][x][y] = '1') then
						inc(n1);
					if (d[j][x][y] = '1') then
						inc(n2);
				end;
			t[i, j].n := n1-n2;
		end;
end;

function find(dig: TDigit): Integer;
var
	i, j, x						: Integer;
	err						: Boolean;
begin
	for i := 0 to 11 do begin
		err := False;
		for j := 1 to 5 do
			for x := 1 to 3 do
				if (d[i][j][x] <> dig[j][x]) then begin
					err := True;
					break;
				end;
		if (not err) then begin
			find := i;
			Exit;
		end;
	end;
end;

function int(j, i: Integer): Integer;
begin
	if (j = 10) then int := i
	else int := -i;
end;

procedure Solve;
var
	i, j, x, di, dk, dn, ni, nj, nx			: Integer;
	kc, kn						: Integer;
	dig						: TDigit;
	max						: Integer;
	izr2						: Array [1 .. MAXN * 2] of Integer;
	in1						: Integer;
begin
	for i := 1 to n do
		for j := 0 to k do
			for x := -k to k do begin
				dp[i, j, x] := inf;
				dpb[i, j, x].i := 0;
				dpb[i, j, x].j := 0;
				dpb[i, j, x].x := 0;
			end;
	for i := 1 to n*2-1 do begin
                for j := 1 to 5 do dig[j] := '';
		for j := 1 to 5 do
			for x := ((i-1)*3 + 1) to ((i-1)*3 + 3) do
                                dig[j] := dig[j] + s[j][x];
		izr[i] := find(dig);
	end;
	for i := 0 to 9 do
		if (dp[1, t[izr[1], i].k, t[izr[1], i].n] < i) then begin
			dp[1, t[izr[1], i].k, t[izr[1], i].n] := i;
			dpr[1, t[izr[1], i].k, t[izr[1], i].n].d := i;
		end;
	for di := 2 to n do begin
		i := (di-1)*2;
		for dk := 0 to k do
			for dn := -k to k do
				for j := 10 to 11 do begin
					kc := t[izr[i], j].k;
					kn := t[izr[i], j].n;
					for x := 0 to 9 do begin
						inc(kc, t[izr[i+1], x].k);
						inc(kn, t[izr[i+1], x].n);
						if (dk-kc >= 0) and (dn-kn >= -k) and (dn-kn <= k) then
							if (dp[di, dk, dn] < int(j, x) + dp[di-1, dk-kc, dn-kn]) then begin
								dp[di, dk, dn] := int(j, x) + dp[di-1, dk-kc, dn-kn];
								dpr[di, dk, dn].d := x;
								dpr[di, dk, dn].s := j;
								dpb[di, dk, dn].i := di-1;
								dpb[di, dk, dn].j := dk-kc;
								dpb[di, dk, dn].x := dn-kn;
							end;
						dec(kc, t[izr[i+1], x].k);
						dec(kn, t[izr[i+1], x].n);

					end;
				end;

	end;
	max := inf;
	for i := 0 to k do
		if (max < dp[n, i, 0]) then begin
			max := dp[n, i, 0];
			ni := n;
			nj := i;
			nx := 0;
		end;
	i := ni; j := nj; x := nx;
	writeln(max);
	in1 := 0;
	while (dpb[i, j, x].i > 0) do begin
		in1 := in1 + 1;
		izr2[in1] := dpr[i, j, x].d;
		izr2[in1+1] := dpr[i, j, x].s;
		in1 := in1 + 1;
		ni := dpb[i, j, x].i;
		nj := dpb[i, j, x].j;
		nx := dpb[i, j, x].x;
		i := ni; j := nj; x := nx;
	end;
	in1 := in1 + 1;
	izr2[in1] := dpr[i, j, x].d;
	for i := 1 to 5 do res[i] := '';
	for i := in1 downto 1 do
		for j := 1 to 5 do
			res[j] := res[j] + d[izr2[i]][j];
	for i := 1 to 5 do
		writeln(res[i]);
end;

begin
	Init;
	Transform;
	readInput;
	Solve;
end.
