IndexOutOfRangeExeption (C#)

So i am trying to make my array generate a bunch of cubes, like a minecraft ripoff or something, just not procedural. Anyway, here is my code. You may notice that it is modified from a tutorial.
Error Code: IndexOutOfRangeException: Array index is out of range.
(wrapper managed-to-managed) object:ElementAddr_3_4 (object,int,int,int)
TileMap.Start () (at Assets/TileMap.cs:24

public TileType[] tileTypes;

	int[,,] tiles;

	int mapSizeX = 20;
	int mapSizeY = 20;
    int mapSizeZ = 10;

	void Start() {
		// Allocate our map tiles
		tiles = new int[mapSizeX,mapSizeY,mapSizeZ];

		// Initialize our map tiles to be grass
		for(int x=0; x < mapSizeX; x++) {
            for (int y = 0; y < mapSizeX; y++)
            {
                for (int z = 0; z < mapSizeX; z++)
                {
                    tiles[x, y, z] = 0;
                }
            }
		}

		// Let's make a u-shaped mountain range

		tiles[4, 4,0] = 2;
		tiles[5, 4,0] = 2;
		tiles[6, 4,0] = 2;
		tiles[7, 4,0] = 2;
		tiles[8, 4,0] = 2;

		tiles[4, 5,0] = 2;
		tiles[4, 6,0] = 2;
		tiles[8, 5,0] = 2;
		tiles[8, 6,0] = 2;

        tiles[4, 4, 1] = 2;
        tiles[5, 4, 1] = 2;
        tiles[6, 4, 1] = 2;
        tiles[7, 4, 1] = 2;
        tiles[8, 4, 1] = 2;

        tiles[4, 5, 1] = 2;
        tiles[4, 6, 1] = 2;
        tiles[8, 5, 1] = 2;
        tiles[8, 6, 1] = 2;
        tiles[4, 4, 2] = 2;
        tiles[5, 4, 2] = 2;
        tiles[6, 4, 2] = 2;
        tiles[7, 4, 2] = 2;
        tiles[8, 4, 2] = 2;

        tiles[4, 5, 2] = 2;
        tiles[4, 6, 2] = 2;
        tiles[8, 5, 2] = 2;
        tiles[8, 6, 2] = 2;

        // Now that we have all of our map data, let's spawn the visual prefabs

        GenerateMapVisual();
	}

    void GenerateMapVisual()
    {
        for (int x = 0; x < mapSizeX; x++)
        {
            for (int y = 0; y < mapSizeX; y++)
            {
                for (int z = 0; z < mapSizeX; z++)
                {
                    TileType tt = tileTypes[tiles[x, y, z]];
                    Instantiate(tt.tileVisualPrefab, new Vector3(x, y, z), Quaternion.identity);
                }
            }

        }
    }

}

I am pretty new to C#, and i am not sure what is wrong. Please help! Thank you!

68 and 70 reference mapSizeX instead of yz

I believe the issue is that you never give the tileTypes array a size.