Problem with understanding the exercise: C# Part 2 Inheritance exercise: Design a Stack

I’m having a problem understanding the exercise.
I got the idea of creating the class and methods
but I didn’t understand the concept of stack
and how to implement it.

What object do I “push” where do I push it to?
Do I need to create a List? or an array first?
How do I remove the first pushed stack
and where do I return it?

Attached my attempt at understanding how to do this exercise

This is my solution, but still not sure it’s correct or not.
I didn’t use any cast cuz Main method already auto casting for me.
And I did not use loop in Pop() method but use the concept of loop to remove List element
when Main method call Pop().

class Stack
{
List objList = new List();
public void Push(object obj)
{
if (obj != null)
objList.Add(obj);
else
throw new InvalidOperationException(“Exception”);
}
public object Pop()
{
if (objList != null)
{
object popObject=null;
int i = objList.Count - 1;
popObject = objList[i];
objList.RemoveAt(i);
return popObject;
}
else
throw new InvalidOperationException(“Exception”);
}
public void Clear()
{
objList.Clear();
}
}
static void Main(string args)
{
var stack = new Stack();
stack.Push(1);
stack.Push(2);
stack.Push(3);
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
Console.WriteLine(stack.Pop());
}

here is my solution-:

namespace Stack
{
internal class Stack
{
List count = new List();
public void Push(object obj)
{
if (obj == null)
throw new InvalidOperationException(“Stack cannot be null”);
count.Add((string)obj);
}

    public object Pop() 
    {   
        if (count.Count == 0)
        {
            throw new InvalidOperationException("Stack is empty");
        }
        return count[count.Count - 1];
    }

    public void Clear() { count.Clear(); }
}

}

internal class Program
{
private static void Main(string args)
{
var stack = new Stack();
stack.Push(1);
stack.Push(2);
stack.Push(3);

    Console.WriteLine(stack.Pop());
    Console.WriteLine(stack.Pop());
    Console.WriteLine(stack.Pop());
}

}

You have to use Object type so you can push any object like integer, String and so on, And for storing objects you can use Array List which takes an object.