#include<iostream> #include<cstdio> #include<map> #include<set> #include<algorithm> #include<vector> using namespace std; int cnt; map<string,int> ma1; map<int, string> ma2; const int N = 10005; int fa[N]; int n, k; int w[N]; int num[N]; int ew[N]; bool st[N]; void init() { for (int i = 0 ; i < N; i++) { fa[i] = i; num[i] = 1; ew[i] = 0; } } int find(int a) { if (fa[a] == a) return a; else return fa[a] = find(fa[a]); } void unite(int a, int b, int ti) { int f1 = find(a); int f2 = find(b); if (f1 != f2) { fa[f2] = f1; num[f1] += num[f2]; ew[f1] += ew[f2] + ti; } } int main() { cin >> n >> k; init(); for (int i = 1; i <= n; i++) { string a, b; int ti; cin >> a >> b>> ti; if (ma1.count(a) == 0) ma1[a] = ++cnt,ma2[cnt] = a; if (ma1.count(b) == 0) ma1[b] = ++cnt,ma2[cnt] = b; int x = ma1[a], y = ma1[b]; w[x] += ti, w[y] += ti; if (find(x) != find(y)) { unite(x, y, ti); } else ew[find(x)] += ti; } map<int,set<pair<int,int> > > ma3; for (int i = 1; i <= 2*n; i++) { int x = find(i); if (num[x] > 2 && ew[x] > k) ma3[x].insert({w[i], i}); } vector<string > vec; for (auto &i : ma3) { vec.push_back(ma2[(*i.second.rbegin()).second]); } sort(vec.begin(), vec.end()); int len = vec.size(); cout << len << endl; for (int i = 0; i < len; i++) { cout << vec[i]<< " " << num[find(ma1[vec[i]]) ]<<endl; } }