/*
Hokudai Practice Constest 2014
G - Brave Princess Revisited

ティツァツ」テヲツウツ陛ッツシツ堙」ツδ?」ツつ、テ」ツつッテ」ツつケテ」ツδ暗」ツδゥ (テ」ツつーテ」ツδゥテ」ツδ陛ヲツ慊?ァツ淞ュティツキツッ)
テヲツ閉オテ」ツ?ョテヲツ閉ーテ」ツつ津ィツセツコテ」ツ?ョテ」ツつウテ」ツつケテ」ツδ暗」ツ?ィテ」ツ?療」ツ?淌」ツつーテ」ツδゥテ」ツδ陛ヲツ慊?ァツ淞ュティツキツッテ・ツ閉湘ゥツ。ツ古」ツ?ォテ・ツクツーテァツ敖?」ツ?ァテ」ツ?催」ツつ凝」ツ?禿」ツ?ィテ」ツ?ッテヲツッツ氾ィツシツεァツ堋?・ツョツケテヲツ伉禿」ツ?ォテ」ツつ湘」ツ?凝」ツつ凝」ツ??
テ」ツ?療」ツ?凝」ツ?療」ツ??ィツュツキティツ。ツ崚」ツつ津ゥツ崢?」ツ??」ツ?凝・ツ青ヲテ」ツ?凝」ツ?ァティツセツコテ」ツ?ョテ」ツつウテ」ツつケテ」ツδ暗」ツ?古・ツ、ツ嘉」ツつ湘」ツつ凝ヲツ?ァティツウツェテ」ツ?古」ツ?づ」ツつ凝」ツ?淌」ツつ?」ツ??」ツ?敕」ツ?ョテ」ツ?セテ」ツ?セテ」ツ?ァテ」ツ?ッティツァツ」テ」ツ?妥」ツ?ェテ」ツ??」ツ??
テ」ツ?禿」ツ?禿」ツ?ァテ」ツ??ヲツョツ凝ゥツ?喪テ」ツ?ョテ」ツ?ィテ」ツ?催」ツ?ォテ・ツョツソテ・ツ?エvテ」ツ?ォテ」ツ??」ツつ凝ァツ環カテヲツ??v,r)テ」ツつ津ゥツ?づァツつケテ」ツ?ィテ」ツ?凖」ツつ凝ヲツ仰。テ・ツシツオテ」ツつーテ」ツδゥテ」ツδ陛」ツつ津ィツ?ε」ツ?暗」ツつ凝」ツ??
テヲツ慊?ァツ淞ュティツキツッテ」ツ?ァテ」ツ?ッテ」ツ??ヲツョツ凝ゥツ?妥」ツ?古・ツ青古」ツ?佚」ツ?ァテ」ツ?づ」ツつ古」ツ?ーテ」ツ??、ツサツ・テゥツ卍催」ツ?ョティツュツキティツ。ツ崚」ツ?ョテゥツ崢?」ツ??ヲツ鳴ケテ」ツ?ッテ・ツ青古」ツ?佚」ツ?ォテ」ツ?ェテ」ツつ凝」ツ?淌」ツつ?」ツ??
テ」ツ?敕」ツ?ョテヲツ仰。テ・ツシツオテ」ツつーテ」ツδゥテ」ツδ陛、ツクツ甘」ツ?ァテヲツ慊?ァツ淞ュティツキツッテ・ツ閉湘ゥツ。ツ古」ツつ津ィツァツ」テ」ツ?妥」ツ?ーテ」ツつ暗」ツ??」ツ??

テヲツ仰。テ・ツシツオテ」ツつーテ」ツδゥテ」ツδ陛」ツ?ッテゥツ?づァツつケテ」ツ?鍬N = 10^4テ・ツ?凝」ツ??ィツセツコテ」ツ?鍬M = 10^6テヲツ慊ャテ」ツ?ィテ」ツ?ェテ」ツつ凝」ツ?淌」ツつ?」ツ??
テ・ツ環ケテァツ篠?」ツ?ョテ」ツつ暗」ツ??ヲツ慊?ァツ淞ュティツキツッテ」ツつ「テ」ツδォテ」ツつエテ」ツδェテ」ツつコテ」ツδ?」ツつ津ァツ板ィテ」ツ??」ツつ凝・ツソツ?ィツヲツ?」ツ?古」ツ?づ」ツつ凝」ツ??
テ」ツδ?」ツつ、テ」ツつッテ」ツつケテ」ツδ暗」ツδゥテヲツウツ陛」ツつ恥riority queueテ」ツつ津ァツ板ィテ」ツ??」ツ?ヲテ・ツョツ淌ィツ」ツ?」ツ?凖」ツつ古」ツ?ーテ・ツ債?・ツ按?」ツ?ァテ」ツ?づ」ツつ凝」ツ??

テヲツ卍づゥツ鳴禿ィツィツ暗ァツョツ療ゥツ?湘ッツシツ唹(LM logN)
テァツゥツコテゥツ鳴禿ィツィツ暗ァツョツ療ゥツ?湘ッツシツ唹(LM)
*/

#include<iostream>
#include<queue>
#include<map>
#include<algorithm>
#include<vector>
 
#define fs first
#define sc second
using namespace std;
typedef pair<int,int> pii;
typedef pair<int,pii> tri;

const int INF = 1e8;
int num[110][110];

int main(){
  int n,m,l;
  while(cin >> n >> m >> l, n){
    //テ」ツつーテ」ツδゥテ」ツδ陛」ツ?ョテゥツ堋」テヲツ篠・テ」ツδェテ」ツつケテ」ツδ暗ィツ。ツィテァツ渉セ
    //g[i].fs: テヲツ閉オテ」ツ?ョテヲツ閉ー, g[i].sc.fs: ティツ。ツ古」ツ?催・ツ?暗」ツ?ョテ・ツョツソテ・ツ?エ, g[i].sc.sc: テゥツ閉キテ」ツ??ティツュツキティツ。ツ崚」ツつ津ゥツ崢?」ツ??ヲツ鳴凖ゥツ??
    vector<tri> g[110];
 
    for(int i=0;i<m;i++){
      int a,b,d,e;
      cin >> a >> b >> d >> e;
      g[a].push_back(tri(e,pii(b,d)));
      g[b].push_back(tri(e,pii(a,d)));
    }
 
    //テ・ツ按敕ヲツ慊淌・ツ個?
    for(int i=1;i<=n;i++){
      for(int j=0;j<=l;j++)num[i][j] = INF;
    }    
    num[1][l] = 0;

    //テヲツ伉?ゥツ??」ツ?ョテ・ツ?ェテ・ツ?暗・ツコツヲテ、ツサツ佚」ツ?催」ツつュテ」ツδ・テ」ツδシ
    priority_queue<tri ,vector<tri> ,greater<tri> > q;
    q.push(tri(0,pii(1,l)));
 
    //テ」ツδ?」ツつ、テ」ツつッテ」ツつケテ」ツδ暗」ツδゥ
    while(q.size()){
      tri p = q.top();q.pop();
      //p.fs: テヲツ閉オテ」ツ?ョテァツキツ湘ヲツ閉ー, p.sc.fs: テァツ渉セテ・ツ慊ィテ・ツ慊ー, p.sc.sc: テヲツョツ凝ゥツ??
      int enemy = p.fs, pos = p.sc.fs, money = p.sc.sc;
 
      for(int i=0;i<(int)g[pos].size();i++){
	int nxt = g[pos][i].sc.fs, cost = g[pos][i].sc.sc;
	if(cost <= money){
	  int rem = money - cost;
	  if(num[nxt][rem] > enemy){
	    num[nxt][rem] = enemy;
	    q.push(tri(enemy,pii(nxt,rem)));
	  }
	}
	if(num[nxt][money] > enemy + g[pos][i].fs){
	  num[nxt][money] = enemy + g[pos][i].fs;
	  q.push(tri(enemy+g[pos][i].fs, pii(nxt,money)));
	}
      }
    }
   
    //テ」ツつエテ」ツδシテ」ツδォテ」ツ?ァテ」ツ?ョテヲツョツ凝ゥツ?妥」ツ?ッテァツクツ崚」ツつ甘」ツ?古」ツ?ェテ」ツ??」ツ?ョテ」ツ?ァテ」ツ??」ツ?凖」ツ?ケテ」ツ?ヲテ」ツ?ョテ、ツクツュテ」ツ?凝」ツつ嘉ヲツ慊?・ツーツ湘・ツ?、テ」ツつ津ヲツアツづ」ツつ?」ツつ?
    int ans = INF;
    for(int i=0;i<=l;i++)ans = min(ans,num[n][i]);
    cout << ans << endl;
  }
}

Measured memory_bytes: 1732