//04
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>

using namespace std;

struct S{
  int v,c,d;
  bool operator<(S a)const{
    if(c!=a.c){
      return c>a.c;
    }else{
      return d>a.d;
    }
  }
};

struct E{
  int t,c;
};

int main(){
  for(int n,m,c;cin>>n>>m>>c,n|m|c;){
    vector<E> e[101];
    while(m--){
      int f,t,c;
      cin>>f>>t>>c;
      E ce={t,c};
      e[f].push_back(ce);
    }
    priority_queue<S> que;
    S is={1,0,0};
    que.push(is);
    int p[101];
    fill(p,p+101,-1);
    for(;;){
      S cs=que.top();
      if(cs.v==n&&cs.d<=c)break;
      que.pop();
      if(cs.d>c||p[cs.v]==cs.c)continue;
      p[cs.v]=cs.c;
      for(int i=0;i<e[cs.v].size();i++){
	S ns[2]={{e[cs.v][i].t,cs.c,cs.d+e[cs.v][i].c},{e[cs.v][i].t,cs.c+1,cs.d}};
	que.push(ns[0]);
	que.push(ns[1]);
      }
    }
    cout<<que.top().c<<endl;
  }
  return 0;
}
      