This is not another solution, it is a comment on Solution 2 but I am adding it in a 'Solution' section because I don't think that I can format code in a 'Comment' section.
The most compact (in source code, but not in runtime efficiency) way of creating a (pseudo) jagged array that I have found is ...
var numbers = new Dictionary<int, Dictionary<int, string>>
{
[0] = { [0] = "zero-zero" },
[1] = { [0] = "one-zero", [1] = "one-one" },
[2] = { [0] = "two-zero", [1] = "two-one", [2] = "two-two" },
[3] = { [0] = "three-zero", [1] = "three-one", [2] = "three-two", [3] = "three-three" }
};
Console.WriteLine(numbers[3][2]);