//Krushkal Algorithm

#include<bits/stdc++.h>
using namespace std;
vector<int>v;
class Edge {
	public:
	int src;
	int dest;
	int wt;
};

bool cmp(Edge e1, Edge e2) {
	return e1.wt > e2.wt;
}

int findParent(int ch, int *parent) {
	if(parent[ch] == ch) {
		return ch;
	} else {
		return findParent(parent[ch],parent);
	}
}

void krushkal(Edge *input, int n, int m) {
	sort(input+1,input+m+1, cmp);
	int parent[n+1];
	int count = 1;
	for(int i=1;i<=n;i++) parent[i] = i;
	Edge *output = new Edge[n+1];
	int i = 1;
	while(count != n) {
		Edge currEdge = input[i++];
		int srcParent = findParent(currEdge.src, parent);
		int destParent = findParent(currEdge.dest, parent);
		if(srcParent != destParent) {
			output[count++] = currEdge;
			parent[srcParent] = destParent;
		} else {
			v.push_back(currEdge.wt);
		}
	}
}

int main() {
	int n,m,s;
	cin>>n>>m>>s;
	Edge *input = new Edge[m+1];
	for(int i=1;i<=m;i++) {
		cin >> input[i].src >> input[i].dest >> input[i].wt;
	}
	krushkal(input,n,m);
	sort(v.begin(),v.end());
	int ans = 0, i = 0;
	for(i=0;i<v.size();i++) {
		if(ans+v[i]<=s) {
			ans+=v[i];
		} else {
			break;
		}
	}
	cout<<i<<" "<<ans;
	return 0;
}