To easily verify what davebollinger said just replace your long string with something short but unique for each entry - like
c[i][j] = “teststring”…(i*1000+j)
and watch your memory requirements become even more impressive 
There are a few more rules/tips to optimize memory usage. F.i. the overhead for tables is bigger than for values which means, if you use a 1d array instead of 2d or even 3d, there’s some more memory to be saved at slightly more complex, but maybe even faster code especially while iterating/updating your tiles.
I.e. you’d write
local mapWidth = 130 local mapHeight = 130 local mapArray = { filled with your content } for iy = 1, mapHeight do local tileIdx = iy\*mapWidth for ix = 1, mapWidth do local tileValue = mapArray[tileIdx] tileIdx = tileIdx + 1 end end
The reason this can be better is because Lua does not support multidimensional arrays in a single memory block as f.i. C/C++, you just create lots of small arrays within other arrays and if you do 2 or even 3 dimensions you actually do just a second or third array access which for sure is slower than a simple addition.
Downside is, single element access is a bit less convenient.
Also, there is a chance that, depending on how you build your arrays, Lua might use it’s hash table implementation instead of the direct integer based indexing but I’d start with big low hanging fruit first (i.e. the boolean arrays).