#nullable enable int h, w, k; { var input = Console.ReadLine()!.Split(' '); h = int.Parse(input[0]); w = int.Parse(input[1]); k = int.Parse(input[2]); } var az = new int[h, w]; var bz = new int[h, w]; for (var _i = 0; _i < 2; _i++) { for (var i = 0; i < h; i++) { var input = Console.ReadLine()!.Split(' '); for (var j = 0; j < w; j++) az[i, j] = int.Parse(input[j]); } (az, bz) = (bz, az); } var aSumI = new int[h]; var aSumJ = new int[w]; var bMinI = new int[h]; var bMinJ = new int[w]; bMinI.AsSpan().Fill(int.MaxValue); bMinJ.AsSpan().Fill(int.MaxValue); for (var i = 0; i < h; i++) for (var j = 0; j < w; j++) { var a = az[i, j]; aSumI[i] += a; aSumJ[j] += a; var b = bz[i, j]; bMinI[i] = Math.Min(bMinI[i], b); bMinJ[j] = Math.Min(bMinJ[j], b); } var ans = 0L; for (var i = 0; i < h; i++) for (var j = 0; j < w; j++) { var (si, sj) = (aSumI[i], aSumJ[j]); var (ci, cj) = (bMinI[i], bMinJ[j]); var b = bz[i, j]; var d = k / b; long di = d; long dj = d; var l = k - d * b; ans = Math.Max(ans, (si + di + l / ci) * (sj + dj)); ans = Math.Max(ans, (si + di) * (sj + dj + l / cj)); } Console.WriteLine(ans);