Yanlış anlamadıysam aşağıdaki gibi bir kod işinizi görür. Sizin kodun çıktı vermeme sebebi split sonucu olarak ArrayList'e eklemeniz. Split string[] dönüyor, siz Contains kısmında string arıyorsunuz haliyle if içine hiç girmiyor.
Kodun çıktısı: https://prnt.sc/rbw47m

class Program
{
static void Main(string[] args)
{
int[] sayilar = { 5, 2, 2, 5, 1, 2, 1, 1, 2, 1, 1, 5, 10, 2,
5, 1, 2, 1, 10, 10, 2, 2, 1, 10, 1, 5, 1, 10, 1, 2, 1, 1,
5, 1, 1, 1, 40, 1, 1, 5, 40, 2, 20, 1, 5, 2, 10, 10, 2, 1, 1, 5, 10, 1, 2,
10, 40, 2, 1, 10, 20 };

int sayi1, sayi2, sayi3;
int sayac1 = 0;

sayi1 = Convert.ToInt32(Console.ReadLine());
sayi2 = Convert.ToInt32(Console.ReadLine());
sayi3 = Convert.ToInt32(Console.ReadLine());

int[] pattern = { sayi1, sayi2, sayi3 };

List<Result> results = new List<Result>();
if (sayilar.Contains(sayi1) && sayilar.Contains(sayi2) && sayilar.Contains(sayi3))
{
int index = 0;
do
{
index = SearchPattern<int>(sayilar, pattern, index);
sayac1++;
if (index > 0)
{
var result = results.FirstOrDefault(x => x.Value == sayilar[index]);
if (result != null)
result.Count++;
else
results.Add(new Result(sayilar[index]));
}
} while (index != -1);

foreach (var result in results)
{
Console.WriteLine($"{result.Count} kez {result.Value} geldi");
}

}
Console.ReadKey();
}

public static int SearchPattern<T>(T[] source, T[] pattern, int startIndex = 0) 
{
for (int i = startIndex; i < source.Length - pattern.Length; i++)
{
for (int j = 0; j < pattern.Length; j++)
{
if (!EqualityComparer<T>.Default.Equals(pattern[j], source[i + j]))
{
goto jmp;
}
}
return i + pattern.Length;
jmp:;
}
return -1;
}
class Result
{
public int Value;
public int Count;
public Result(int value)
{
Value = value;
Count = 1;
}
}
}