{
ZADATAK: drzave
JEZIK: PASCAL
}

var n,m,k:integer;
min:longint;
grad: array[1..8] of boolean;
a:array[1..100,1..8,1..8] of integer;
b:array[1..99,1..8,1..8] of integer;
g,t,i,j,d,p:integer;

procedure dfs(g:integer;bg:integer;d:integer;r:longint);
var i,j:integer;
begin
		 if (bg<m-1) then
		 begin
						 grad[g]:=true;
						 for i:=1 to m do
						 if (not grad[i])and (a[d][g][i]>0) then
						 dfs(i,bg+1,d,r+a[d][g][i]);
						 grad[g]:=false;
		 end
		 else if (d<n) then
		 begin
					for i:=1 to m do
				 if (b[d][g][i]>0) then
				 begin
								for j:=1 to m do
				 grad[j]:=false;
				 dfs(i,0, d+1,r+b[d][g][i]);
				 end;
		 end
		 else if ((min=-1) or (r<min)) then min:=r;
end;

begin
				readln(n,m,k);
		for t:=1 to n-1 do
		begin
				for i:=1 to m do
				begin
				for j:=1 to m do
				read(a[t][i][j]);
				readln;
				end;
				for i:=1 to m do
				for j:=1 to m do
				b[t][i][j]:=0;
				for i:=1 to k do
				begin
				readln(j,p,d);
				b[t][j][p]:=d;
				end;
		end;
				for i:=1 to m do
				begin
				for j:=1 to m do
				read(a[n][i][j]);
				readln;
				end;
		min:=-1;
		for g:=1 to m do
		begin
		for i:=1 to m do grad[i]:=false;
		dfs(g, 0, 1, 0);
		end;
    writeln(min);
end.
