whats this Argument Out Of Range error when navigating between 0 and max value?

Im making a combat menu like this:

← Skills: skill name →

← Magics: magic name →

← Items : item name →

skill name’s variable is called skillbagCursor

magic name’s variable is called magicbagCursor

item name’s variable is called itembagCursor

pressing left or right arrow should change the value in the targetted horizontal row.
that works, but when i go left or right i get an error, i used a Debug.Log(Master.itembag.Count); to see the size of the list and it always say 2 or more, it never says 1 or 0 though I add 3 total items at 3 seperate times(should say 1, then 2, then 3)… im stumped. Would anyone like to help me figure this out?

import System.Collections.Generic;

var firstPlay : boolean = true;
var itembagCursor : int = 0;
static var itembagCursorMax : int = 0;
var skillbagCursor : int = 0;
static var skillbagCursorMax : int = 0;
var magicbagCursor : int = 0;
static var magicbagCursorMax : int = 0;
static var selectedSkill : String;
static var selectedMagic : String;
static var selectedItem : String;
static var activeCursor : String = "skillbag";

function Start(){

	if(firstPlay){
    	Master.itembag.Add("Empty"); //add item to inventory
    	Master.skillbag.Add("Rush Cut"); 
    	Master.magicbag.Add("Fire");
    	firstPlay = false;//save this value on saving!!!***~~~
	}
}

function Update(){
itembagCursor = Mathf.Clamp(itembagCursor, 0, itembagCursorMax);
itembagCursorMax = Master.itembag.Count;
skillbagCursorMax = Master.skillbag.Count;
magicbagCursorMax = Master.magicbag.Count;
selectedItem = Master.itembag[itembagCursor];
selectedMagic = Master.magicbag[magicbagCursor];
selectedSkill = Master.skillbag[skillbagCursor];
Interface.messageWindow = selectedItem;
/* SET THE ACTIVE CURSOR */

if(Input.GetKeyDown(KeyCode.UpArrow) == true)
{
    switch(activeCursor) 
    {
        case "skillbag":
            activeCursor = "itembag";
            break;
        case "magicbag":
             activeCursor = "skillbag";
             break;
        case "itembag":
            activeCursor = "magicbag";
            break;
    } 
} 

else if(Input.GetKeyDown(KeyCode.DownArrow) == true)
{
    switch(activeCursor) 
    {
        case "skillbag":
            activeCursor = "magicbag";
            break;
        case "magicbag":
             activeCursor = "itembag";
             break;
        case "itembag":
            activeCursor = "skillbag";
            break;
    } 
} 
	
/* ENABLE ACTIVE CURSOR TO NAVIGATE ITEMS <- & -> */

	if(Input.GetKeyDown(KeyCode.LeftArrow) == true)
	{
    	switch(itembagCursor) 
    	{
      	 case itembagCursor > 0:
            	itembagCursor = itembagCursor - 1;
            	break;
       	 case itembagCursor == 0:
            	 itembagCursor = itembagCursorMax;
            	 break;
    	} 
	}
	
	if(Input.GetKeyDown(KeyCode.RightArrow) == true)
	{
    	switch(itembagCursor < itembagCursorMax) 
    	{
      	 case true:
            	itembagCursor = itembagCursor + 1;
            	break;
       	 case false:
            	 itembagCursor = 0;
            	 break;
    	} 
	}
	
	if(Input.GetKeyDown(KeyCode.LeftArrow) == true)
	{
    	switch(magicbagCursor) 
    	{
      	 case magicbagCursor > 0:
            	magicbagCursor = magicbagCursor - 1;
            	break;
       	 case itembagCursor == 0:
            	 magicbagCursor = magicbagCursorMax;
            	 break;
    	} 
	}
	
	if(Input.GetKeyDown(KeyCode.RightArrow) == true)
	{
    	switch(magicbagCursor) 
    	{
      	 case magicbagCursor < magicbagCursorMax:
            	magicbagCursor = magicbagCursor + 1;
            	break;
       	 case magicbagCursor == magicbagCursorMax:
            	 magicbagCursor = 0;
            	 break;
    	} 
	}
	
	if(Input.GetKeyDown(KeyCode.LeftArrow) == true)
	{
    	switch(skillbagCursor) 
    	{
      	 case skillbagCursor > 0:
            	skillbagCursor = skillbagCursor - 1;
            	break;
       	 case itembagCursor == 0:
            	 skillbagCursor = skillbagCursorMax;
            	 break;
    	} 
	}
	
	if(Input.GetKeyDown(KeyCode.RightArrow) == true)
	{
    	switch(skillbagCursor) 
    	{
      	 case skillbagCursor < skillbagCursorMax:
            	skillbagCursor = skillbagCursor + 1;
            	break;
       	 case skillbagCursor == skillbagCursorMax:
            	 skillbagCursor = 0;
            	 break;
    	} 
	} 
//USE THE ITEMS WHEN ENTER PRESSED IN COMBAT MENU//

	if(Input.GetKeyDown(KeyCode.Return) && activeCursor == "itembag" && selectedItem == "Potion" && Master.potion > 0){
		Statistics.playerCurHp = Statistics.playerCurHp + 100;
		Interface.messageWindow = "You used a 'Potion'.";
		Master.potion = Master.potion - 1;
	}
	if(Master.potion == 0 && Master.itembag.Count > 1){
		
		Master.itembag.Remove("Potion");
	}
	if(Master.potion == 0 && Master.itembag.Count == 1){
		Master.itembag.Add("Empty");
		Master.itembag.Remove("Potion");
	}
	if(Input.GetKeyDown(KeyCode.Return) && activeCursor == "itembag" && selectedItem == "Ether" && Master.ether > 0){
		Statistics.playerCurMp = Statistics.playerCurMp + 50;
		Interface.messageWindow = "You used an 'Ether'.";
		Master.ether = Master.ether - 1;
	}
	if(Master.ether == 0 && Master.itembag.Count > 1){
		Master.itembag.Remove("Ether");
		
	}
	if(Master.ether == 0 && Master.itembag.Count == 1){
		Master.itembag.Add("Empty");
		Master.itembag.Remove("Ether");
	}
}

It looks like you’re setting the max itembagCursor to the count of items. Array’s are relative to 0, so valid indexes for Master.itembag are 0 to Master.itembag.Count - 1.

Try this:

itembagCursorMax = Master.itembag.Count - 1;

Also, shouldn’t you move that line above the clamp?