static void Main(String[] args)
    {
        var mn = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
        var g  = new Dictionary <int, List <Edge> >();

        for (int i = 0; i < mn[1]; ++i)
        {
            var         xyr = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
            List <Edge> eds;
            if (!g.TryGetValue(xyr[0], out eds))
            {
                eds = new List <Edge>();
                g.Add(xyr[0], eds);
            }
            eds.Add(new Edge(xyr[0], xyr[1], xyr[2]));

            if (!g.TryGetValue(xyr[1], out eds))
            {
                eds = new List <Edge>();
                g.Add(xyr[1], eds);
            }
            eds.Add(new Edge(xyr[1], xyr[0], xyr[2]));
        }
        var first = int.Parse(Console.ReadLine());

        int sum = 0;

        foreach (var edge in Prims.BuildMinimumSpanningTree(first, new DictionaryGraph(g)))
        {
            sum += edge.weight;
        }

        Console.WriteLine(sum);
    }