#include
#include
#include
using namespace std;
struct node
{
int idx;
int distance;
int money;
node(){}
node(int _idx, int _distance, int _money)
{
idx=_idx;
distance=_distance;
money=_money;
}
bool operator < (const node &tmp) const{
return distance > tmp.distance;
}
};
int main()
{
int s;
int n,m;
cin>>s>>n>>m;
vectorv[n+1];
for(int i=0; i>a>>b>>c>>d;
v[a].push_back(node(b,c,d));
v[b].push_back(node(a,c,d));
}
int dis[n+1][s+1];
for(int i=0;ipq;
pq.push(node(1,0,0));
while(!pq.empty())
{
node c=pq.top();
pq.pop();
for(int i=0;i< v[c.idx].size(); i++)
{
int sosed = v[c.idx][i].idx;
int d = v[c.idx][i].distance;
int pari= v[c.idx][i].money;
if(pari+c.money<=s)
{
if(d+c.distance