When you assign to vals[0] in 'addFirst, you
overwrite whatever value is in it.
It's more work than necessary to turn an Array (or ArrayList ?) into the equivalent of LIFO (last in, first out) stack, when .NET gives you one ready to use in the System.Collections.Generic Library.
private Stack<int> intStack = new Stack<int>();
intStack.Push(100);
int TopInt = intStack.Peek();
int TopInt = intStack.Pop();
What you give up by using a Stack is any way to use an index to access a particular element that is not on "top" of the Stack.