n, m, r = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)]
k = min(n, m) // 2
b = [[] for _ in range(k)]
c = [[] for _ in range(k)]
for t in range(k):
for j in range(t, m-1-t):
b[t].append(a[t][j])
for i in range(t, n-1-t):
b[t].append(a[i][m-1-t])
for j in range(m-1-t, t, -1):
b[t].append(a[n-1-t][j])
for j in range(n-1-t, t, -1):
b[t].append(a[j][t])
for t in range(k):
l = len(b[t])
p = r % l
for i in range(l):
c[t].append(b[t][(i+p)%l])
ans = [[0] * m for _ in range(n)]
for t in range(k):
cnt = 0
for j in range(t, m-1-t):
ans[t][j] = c[t][cnt]
cnt += 1
for i in range(t, n-1-t):
ans[i][m-1-t] = c[t][cnt]
cnt += 1
for j in range(m-1-t, t, -1):
ans[n-1-t][j] = c[t][cnt]
cnt += 1
for j in range(n-1-t, t, -1):
ans[j][t] = c[t][cnt]
cnt += 1
for row in ans:
print(' '.join(map(str, row)))
배열 돌리기 1과의 차이점 : r의 크기가 매우 커질 수 있다 -> 나머지 연산을 통해 해결