Melhorar performance no C#

Fala galera! Blz?

Bom, esse é meu primeiro tópico aqui no GUJ, então me desculpem caso eu tenha feito algo errado.

Enfim, estou tentando resolver esse problema do URI em C#. Eu meio que já resolvi o problema, só que meu código não está desempenhando bem o suficiente para ser aprovado pelo URI, então gostaria de otimizar ele. Já fiz algumas pesquisas e já modifiquei meu código de acordo com o conteúdo que encontrei, mas até agora sem sucesso : (

Esse é o meu código atual:

using System;
using System.Text;

namespace uri_1025
{
    class Program
    {
        static void Main(string[] args)
        {
            Int16 numberOfMarbles = 1, NumberOfConsultations = 1, j = 1, marble = 0, a = 0;
            string[] numberOfMarblesAndNumberOfConsultations = new string[] { };

            while (NumberOfConsultations != 0 && numberOfMarbles != 0)
            {
                numberOfMarblesAndNumberOfConsultations = Console.ReadLine().Split(' ');
                numberOfMarbles = Int16.Parse(numberOfMarblesAndNumberOfConsultations[0]);
                NumberOfConsultations = Int16.Parse(numberOfMarblesAndNumberOfConsultations[1]);
                Int16[] marbles = new Int16[numberOfMarbles];
                if (numberOfMarbles != 0 && NumberOfConsultations != 0)
                {
                    for (Int16 i = 0; i < numberOfMarbles; i++)
                    {
                        marble = Int16.Parse(Console.ReadLine());
                        marbles[i] = marble;
                    }

                    a = 0;
                    Int16[] query = new Int16[NumberOfConsultations];

                    for (int i = 0; i < NumberOfConsultations; i++)
                    {
                        query[i] = Int16.Parse(Console.ReadLine());
                    }
                    Console.WriteLine("CASE# " + j + ":");
                    while (a < NumberOfConsultations)
                    {
                        FoundAt_or_NotFound(query[a], marbles);
                        a++;
                    }
                    j++;
                }
            }
        }

        private static void FoundAt_or_NotFound(Int16 marble, Int16[] marbles)
        {
            Array.Sort(marbles);
            StringBuilder msg = new StringBuilder();
            var result = Array.FindIndex(marbles, x => x == marble);

            if (result < 0)
            {
                msg.Append(marble);
                msg.Append(" not found");
                Console.WriteLine(msg);
            }
            else
            {
                msg.Append(marble);
                msg.Append(" found at ");
                msg.Append(result + 1);
                Console.WriteLine(msg);
            }
        }
    }
}
1 curtida

Em C# o nome do método é FoundAtOrNotFound a nomenclatura exige assim, só não entendi como otimizar, o que esse código basicamente faz?