Hello,

I keep getting the error:
ArgumentOutOfRangeException: Argument is out of range.
Parameter name: index
System.Collections.Generic.List`1[UnityEngine.Vector3].get_Item (Int32 index) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Collections.Generic/List.cs:633)
MazeCreator.CreateW () (at Assets/Scripts/MazeCreator.cs:142)
MazeCreator.Start () (at Assets/Scripts/MazeCreator.cs:43)

I have looked at other posts to see how other people have solved this error, but none of them have helped me.  Any help would be greatly appreciated.  
Here is my code:

Code:

using System.Collections.Generic;
using UnityEngine;



public class assignCells
{
    public static List<List<Vector3>> Cells = new List<List<Vector3>>();
    public static void cCells(Vector3 bottom, Vector3 top, Vector3 right, Vector3 left)
    {
        if (top.x == bottom.x + 20.0 && right.z == left.z + 50.0)
        {
            if(top == null){
                top = bottom;
            }
            if (left == null)
            {
                left = right;
            }
            Cells.Add(new List<Vector3> { bottom, top, right, left });
        }

    }

}



public class MazeCreator : MonoBehaviour {
    public GameObject Wall;
    public static int xsize = 10;
    public static int zsize = 10;
    private GameObject wallH;
    public static List<Vector3> mazeNumH = new List<Vector3>();
    public static List<Vector3> mazeNumV = new List<Vector3>();
    static System.Random rc = new System.Random();
    static int rn = rc.Next(1, xsize*zsize);
    

    // Use this for initialization
    void Start ()
    {
        CreateW();
      
    }
 
 // Update is called once per frame
 void Update () {


    }

    public void gC()
    {
        List<Vector3> old = new List<Vector3>();

        List<int> rnL = new List<int>();
        
        for (int i = 0; i < xsize * zsize; i++)
        {

            List<Vector3> tC = assignCells.Cells[rn];
            List<int> rCg = new List<int>
            {
                rn + 1,
                rn + 201,
                rn - 1,
                rn - 201
            };
            int rCp = rc.Next(1, 5);
            int oC = rCg[rCp];
            List<Vector3> nC = assignCells.Cells[oC];

            if (nC == null)
            {
                if(old.Contains(tC[1]) || old.Contains(tC[2]) || old.Contains(tC[3]) || old.Contains(tC[4])){
                    rnL[i--] = rn;
                    continue;
                }
                else
                {
                    i--;
                }
                
            }
            if(tC[1] == nC[2])
            {
                tC.RemoveAt(1);
                Instantiate(Wall, tC[2], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[3], Quaternion.Euler(90, 0, 0));
                Instantiate(Wall, tC[4], Quaternion.Euler(90, 0, 0));
                assignCells.Cells.Insert(rn, old);
                assignCells.Cells.RemoveAt(rn);
            }
            if (tC[3] == nC[4])
            {
                tC.RemoveAt(3);
                Instantiate(Wall, tC[1], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[2], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[4], Quaternion.Euler(90, 0, 0));
                assignCells.Cells.Insert(rn, old);
                assignCells.Cells.RemoveAt(rn);
            }
            if (tC[2] == nC[1])
            {
                tC.RemoveAt(2);
                Instantiate(Wall, tC[1], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[3], Quaternion.Euler(90, 0, 0));
                Instantiate(Wall, tC[4], Quaternion.Euler(90, 0, 0));
                assignCells.Cells.Insert(rn, old);
                assignCells.Cells.RemoveAt(rn);
            }
            if (tC[4] == nC[3])
            {
                tC.RemoveAt(4);
                Instantiate(Wall, tC[1], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[2], Quaternion.Euler(0, 0, 0));
                Instantiate(Wall, tC[3], Quaternion.Euler(90, 0, 0));
                assignCells.Cells.Insert(rn, old);
                assignCells.Cells.RemoveAt(rn);
            }
            rnL.Add(rn);
            rn = oC;
            
        }
    }

    
    void CreateW()
    {
        
        for (int i = 0; i <= zsize * xsize; i++)
        {
            
            int nn = 50 * i;
            int nn2 = 20 * i;
            mazeNumH.Add(new Vector3(0 + nn, 0, 0 + nn2));
            mazeNumV.Add(new Vector3(0 + nn2, 0, 0 + nn));
        }
        for (int i = 0; i < zsize * xsize; i++)
        {
            assignCells.cCells(mazeNumH[i], mazeNumH[i + zsize], mazeNumV[i], mazeNumV[i+1]);
        }
        gC();
    }
}