339.
What is the output:

using System;
class A
{
    public virtual void Y()
    {
    // Used when C is referenced through A.
    Console.WriteLine("A.Y");
    }
}
class B : A
{
    public override void Y()
    {
    // Used when B is referenced through A.
    Console.WriteLine("B.Y");
    }
}
class C : A
{
    public void Y() // Can be "new public void Y()"
    {
    // Not used when C is referenced through A.
    Console.WriteLine("C.Y");
    }
}
class Program
{
    static void Main()
    {
    // Reference B through A.
    A ab = new B();
    ab.Y();

    // Reference C through A.
    A ac = new C();
    ac.Y();
    }
}

In this code, the A type is used to reference the B and C types. When the A type references a B instance, the Y override from B is used. But when the A type references a C instance, the Y method from the base class A is used.

Note:
The override modifier was not used.
The C.Y method is local to the C type.

Warning:
In the program, the C type generates a warning because C.Y hides A.Y. Your program is confusing and could be fixed.

Tip:
If you want C.Y to really "hide" A.Y, you can use the new modifier, as in "new public void Y()" in the declaration.