An array is a reference type. The list contains the same references as array s. So the both elements of the list are the same references as s. As the last value of s is { "3", "4" } then you get the result as is. 
Try the following code
using System;
using System.Collections.Generic;
namespace ListOfArrays
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string[]> list = new List<string[]>();
            list.Add( new string[] { "1", "2" } );
            list.Add( new string[] { "3", "4" } );
            foreach (string[] match in list)
            {
                Console.WriteLine(match[0] + match[1]);
            }
        }
    }
}
The output is
12
34
Take into account that it is better to use type name string instead of String The last is dependent of using directive.