>>796
関数内で宣言した変数のために使えるメモリは意外と小さい。(通常1MiBytes程度)
動的確保するのが理想だが,とりあえずは796の配列変数を全て静的変数にしてみろ。
char ac[5000][5000];→static char ac[5000][5000];