/*
这题有点复杂,思路:
1.先存下所有人的电话总时间,并且将他们分为集合;
2.遍历集合,得到集合的数量,记录集合标识
3.对于每个集合,遍历所有人判断他们是否属于这个集合,是则贡献集合的总weight,member++,且随时记录weight最大的人,
若最后weight>k*2且member>=3,就把这个gang存起来
4.输出总gang数,按顺序输出集合leader+member
*/
#include <cstring>
#include <iostream>
#include <map>
#include <string>
#include<vector>
using namespace std;
map<string, string> father;
map<string, int> weight;
map<string, int> gang_weight;
string find(string name)
{
    if(father.find(name)!=father.end())
    {
        if(father[name]!=name)
            return find(father[name]);
    }
    else 
    {
        father[name] = name;
    }
    return father[name];
}


void Union(string name1,string name2)
{
    name1 = find(name1);
    name2 = find(name2);
    father[name1] = name2;
}


int main()
{
    int N, K;
    while (cin >> N >> K)
    {
        for (int i = 0; i < N; i++)
        {
            string name1, name2;
            int time;
            cin >> name1 >> name2 >> time;
            Union(name1, name2);
            weight[name1] += time, weight[name2] += time;
        }
        
        vector<string> gang_leader;
        for (auto it = father.begin(); it != father.end();it++)
        {
            if(it->first==it->second)
                gang_leader.push_back(it->second);//可能还不是首领
        }
        int gangs = 0;
        vector<string> gang_name;
        vector<int> gang_member;
        for (int i = 0; i < gang_leader.size();i++)
        {
            int member = 0;
            int weight_sum = 0;
            int leader_weight =0 ;
            string leader_name;
            for (auto it = father.begin(); it != father.end();it++)
            {
                if(find(it->first)==gang_leader[i])
                {
                    if(weight[it->first]>leader_weight)
                    {
                        leader_weight = weight[it->first];
                        leader_name = it -> first;
                    }
                    weight_sum += weight[it->first];
                    member++;
                }
            }

            if(member>=3&&weight_sum>K*2)
            {
                gangs++;
                gang_name.push_back(leader_name);
                gang_member.push_back(member);
            }
        }
        cout << gangs << endl;
        for (int i = 0; i < gangs;i++)
            cout << gang_name[i] << " " << gang_member[i]<<endl;
        father.clear();
        weight.clear();
    }
}