/*
ID: Aman Raj
LANG: C++
TASK: nocows
*/
//#include<iostream>
#include <stdio.h>
//#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#include<math.h>
typedef  long long  ll;
#include <bits/stdc++.h>
#include <vector>
#include <set>
#include <map>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <climits>
#include <utility>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
//setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val

using namespace std;
using namespace __gnu_pbds;

#define f(i,a,b) for(i=a;i<b;i++)
#define rep(i,n) f(i,0,n)
#define fd(i,a,b) for(i=a;i>=b;i--)
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define vi vector< int >
#define vl vector< ll >
#define ss second
#define ff first
#define fast  ios_base::sync_with_stdio(false); cin.tie(0);  cout.tie(0);
//#define ll long long
#define pii pair< int,int >
#define pll pair< ll,ll >
#define sz(a) a.size()
#define inf (1000*1000*1000+5)
#define all(a) a.begin(),a.end()
#define tri pair<int,pii>
#define vii vector<pii>
#define vll vector<pll>
#define viii vector<tri>
#define mod 2019
//#define mod 3
#define pqueue priority_queue< int >
#define pdqueue priority_queue< int,vi ,greater< int > >
//#define flush fflush(stdout)
#define primeDEN 727999983
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#include <fstream>
// find_by_order()  // order_of_key
typedef tree<
	int,
	null_type,
	less<int>,
	rb_tree_tag,
	tree_order_statistics_node_update>
	ordered_set;


   /*bool comp(pair<ll,ll> p1, pair<ll,ll> p2)
   {
    if(p1.first!=p2.first)return p1.first < p2.first;
     else return p1.second < p2.second;
   }*/



ll power1(ll a, ll b)//a raised to power b
   {  if(b<=0) return 1; if(b==1) return a;
       ll c=power1(a,b/2);
        c*=c;c%=mod;if(b%2==1) c*=a;c%=mod;
        return c;
   }
   ll mi(ll a,ll m)
   { ll c= power1(a,m-2);

     return c;
   }

   ll findpower(ll a,ll b)
   {
       ll i=0;
       ll c=1;
        while(1)
        {
            c*=2;

            if(c>a)return i;
            i++;
        }
   }



   /*
   ll gcd(ll a,ll b)
   {
       if(b==0)return a;
       return gcd(b,a%b);
   }
   #define MAXN 1000001

// stores smallest prime factor for every number
int spf[MAXN];
void sieve()
{
	spf[1] = 1;
	for (int i=2; i<MAXN; i++)

		// marking smallest prime factor for every
		// number to be itself.
		spf[i] = i;

	// separately marking spf for every even
	// number as 2
	for (int i=4; i<MAXN; i+=2)
		spf[i] = 2;

	for (int i=3; i*i<MAXN; i++)
	{
		// checking if i is prime
		if (spf[i] == i)
		{
			// marking SPF for all numbers divisible by i
			for (int j=i*i; j<MAXN; j+=i)

				// marking spf[j] if it is not
				// previously marked
				if (spf[j]==j)
					spf[j] = i;
		}
	}
}*/

  int main()
{    fast;
     ll n,m,s;
      cin>>n>>m>>s;
       vector<vector<ll> > v(n);
       vector<vector<pair<ll,ll> > > vedge(n,vector<pair<ll,ll> > (n) );
       vector<pair<ll,ll> > vexc(n);
       vector<ll> vans(n);

       for(ll i=0;i<m;i++)
       {
           ll u,v_,a,b;cin>>u>>v_>>a>>b;u--;v_--;
            v[u].push_back(v_);
             v[v_].push_back(u);
              vedge[u][v_]={a,b};
              vedge[v_][u]={a,b};
    }
       for(ll i=0;i<n;i++)
       {
            ll a,b;cin>>a>>b;
             vexc[i]={a,b};
       }
       vector<vector<ll> > vdist(n,vector<ll> (5001,1e18) );
       priority_queue<tuple<ll,ll,ll>, vector<tuple<ll,ll,ll>>, greater<tuple<ll,ll,ll>> > q;// node,coins
        s=min(s,(ll)(5000));
        q.push(mt(0,0,s));
         vdist[0][s]=0;

         while(q.size()>0)
         {
           ll a,c,t; tie(t,a,c)=q.top();q.pop();
             t=vdist[a][c];
             //cout<<a<<" "<<c<<" "<<t<<endl;
              for(auto x:v[a])
              {   if(vedge[a][x].first>c)continue;
                  if(vdist[x][c-vedge[a][x].first] > t+vedge[a][x].second)
                  {
                      vdist[x][c-vedge[a][x].first]=t+vedge[a][x].second;
                    q.push(mt(vdist[x][c-vedge[a][x].first],x,c-vedge[a][x].first));
                  }
              }
              ll coins=min(c+vexc[a].first,(ll)(5000));

              if(vdist[a][coins] > t+((coins-c)/vexc[a].first) * vexc[a].second)
                  {
                      vdist[a][coins]=t+((coins-c)/vexc[a].first) * vexc[a].second;
                      q.push(mt(vdist[a][coins],a,coins));
                  }
         }
         for(ll i=1;i<n;i++)
         {
             ll ans=1e18;
              for(ll j=0;j<=5000;j++)
              {
                  ans=min(ans,vdist[i][j]);
              }
              vans[i]=ans;
         }
         for(ll i=1;i<n;i++)cout<<vans[i]<<endl;
      return 0;
}


Measured memory_bytes: 11476