質問させてください 柴田望洋著「明解C言語入門編」の演習で
「2行3列と3行2列の行列の積を求めるプログラムを作成せよ」
x=1,2,3
  4,5,6
y=1,5
  5,3
  8,1
というモノがあるのですが

#include <stdio.h>
int main(void)
{
int i,j,k;
int ma[2][3] = { {1,2,3},{4,5,6} };
int mb[3][2] = { {1,5},{5,3},{8,1} };
int mc[2][2] = {0};

for(i=0;i<2;i++){
for(j=0;j<2;j++){
for(k=0;k<3;k++){
mc[i][j] += ma[i][k] * mb[k][j];
}
printf("%d",mc[i][j]);
}
putchar('\n');
}
return (0);
}

上記のプログラムで良いらしいのですが、何故2行3列と3行2列の積が2行2列になるのか。
mc[i][j] += ma[i][k] * mb[k][j];のように加えて行くのか理解することが出来ません。
どのような理屈なのかをお分かりの方、教えてください。