#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define node pair<ll, pair<ll, ll > >
struct road{
ll dest, money, length;
};
ll dp[10001][101];
void solve()
{
vector<road> g[101];
ll money, cities,roads;
cin>>money>>cities>>roads;
for(ll i=0;i<roads;i++)
{
ll u, v, l, t;
cin>>u>>v>>l>>t;
road r;
r.dest = v, r.length = l, r.money = t;
g[u].push_back(r);
}
priority_queue<node , vector<node >, greater<node > > pq;
// length, city, money
dp[0][1] = 0;
pq.push({0, {1, 0}});
ll ans= INT_MAX;
while(!pq.empty())
{
node fr=pq.top();
pq.pop();
if (fr.second.second > money)
{
continue;
}
if (fr.second.first == cities && fr.second.second <= money)
{
ans = min(fr.first, ans);
dp[fr.second.second][fr.second.first] = fr.first;
}
for(int i=0;i<g[fr.second.first].size();i++)
{
road r = g[fr.second.first][i];
if (dp[fr.second.second][fr.second.first] + r.length < dp[fr.second.second + r.money][r.dest])
{
dp[fr.second.second + r.money][r.dest] = dp[fr.second.second][fr.second.first] + r.length;
pq.push({dp[fr.second.second + r.money][r.dest], {r.dest, fr.second.second + r.money}});
}
}
}
if(ans == INT_MAX)
{
cout<<-1<<endl;
}
else
{
cout<<ans<<endl;
}
for (ll i = 0; i <= 10001; i++)
for (ll j = 0; j <= 100; j++)
{
dp[i][j] = INT_MAX;
}
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
ll t;
cin>>t;
for (ll i = 0; i <= 10001; i++)
for (int j = 0; j <= 100; j++)
{
dp[i][j] = INT_MAX;
}
while(t--)
{
solve();
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBub2RlIHBhaXI8bGwsIHBhaXI8bGwsIGxsID4gPgpzdHJ1Y3Qgcm9hZHsKICAgIGxsIGRlc3QsIG1vbmV5LCBsZW5ndGg7IAp9OwpsbCBkcFsxMDAwMV1bMTAxXTsKCnZvaWQgc29sdmUoKQp7CiAgICB2ZWN0b3I8cm9hZD4gZ1sxMDFdOwogICAgbGwgbW9uZXksIGNpdGllcyxyb2FkczsKICAgIGNpbj4+bW9uZXk+PmNpdGllcz4+cm9hZHM7CiAgICBmb3IobGwgaT0wO2k8cm9hZHM7aSsrKQogICAgewogICAgICAgIGxsIHUsIHYsIGwsIHQ7CiAgICAgICAgY2luPj51Pj52Pj5sPj50OwogICAgICAgIHJvYWQgcjsKICAgICAgICByLmRlc3QgPSB2LCByLmxlbmd0aCA9IGwsIHIubW9uZXkgPSB0OwogICAgICAgIGdbdV0ucHVzaF9iYWNrKHIpOwogICAgfSAKCiAgICBwcmlvcml0eV9xdWV1ZTxub2RlICwgdmVjdG9yPG5vZGUgPiwgZ3JlYXRlcjxub2RlID4gPiBwcTsKICAgIC8vIGxlbmd0aCwgY2l0eSwgbW9uZXkKICAgIGRwWzBdWzFdID0gMDsKICAgIHBxLnB1c2goezAsIHsxLCAwfX0pOwogICAgbGwgYW5zPSBJTlRfTUFYOwogICAgd2hpbGUoIXBxLmVtcHR5KCkpCiAgICB7CiAgICAgICAgbm9kZSBmcj1wcS50b3AoKTsKICAgICAgICBwcS5wb3AoKTsKICAgICAgICBpZiAoZnIuc2Vjb25kLnNlY29uZCA+IG1vbmV5KQogICAgICAgIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChmci5zZWNvbmQuZmlyc3QgPT0gY2l0aWVzICYmIGZyLnNlY29uZC5zZWNvbmQgPD0gbW9uZXkpCiAgICAgICAgewogICAgICAgICAgICBhbnMgPSBtaW4oZnIuZmlyc3QsIGFucyk7CiAgICAgICAgICAgIGRwW2ZyLnNlY29uZC5zZWNvbmRdW2ZyLnNlY29uZC5maXJzdF0gPSBmci5maXJzdDsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpPTA7aTxnW2ZyLnNlY29uZC5maXJzdF0uc2l6ZSgpO2krKykKICAgICAgICB7CiAgICAgICAgICAgIHJvYWQgciA9IGdbZnIuc2Vjb25kLmZpcnN0XVtpXTsKICAgICAgICAgICAgaWYgKGRwW2ZyLnNlY29uZC5zZWNvbmRdW2ZyLnNlY29uZC5maXJzdF0gKyByLmxlbmd0aCA8IGRwW2ZyLnNlY29uZC5zZWNvbmQgKyByLm1vbmV5XVtyLmRlc3RdKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBkcFtmci5zZWNvbmQuc2Vjb25kICsgci5tb25leV1bci5kZXN0XSA9IGRwW2ZyLnNlY29uZC5zZWNvbmRdW2ZyLnNlY29uZC5maXJzdF0gKyByLmxlbmd0aDsKICAgICAgICAgICAgICAgIHBxLnB1c2goe2RwW2ZyLnNlY29uZC5zZWNvbmQgKyByLm1vbmV5XVtyLmRlc3RdLCB7ci5kZXN0LCBmci5zZWNvbmQuc2Vjb25kICsgci5tb25leX19KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIGlmKGFucyA9PSBJTlRfTUFYKQogICAgewogICAgICAgIGNvdXQ8PC0xPDxlbmRsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGNvdXQ8PGFuczw8ZW5kbDsKICAgIH0KICAgIGZvciAobGwgaSA9IDA7IGkgPD0gMTAwMDE7IGkrKykKICAgICAgICBmb3IgKGxsIGogPSAwOyBqIDw9IDEwMDsgaisrKQogICAgICAgIHsKICAgICAgICAgICAgZHBbaV1bal0gPSBJTlRfTUFYOwogICAgICAgIH0KfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApLCBjb3V0LnRpZSgwKTsKICAgIGxsIHQ7CiAgICBjaW4+PnQ7CiAgICBmb3IgKGxsIGkgPSAwOyBpIDw9IDEwMDAxOyBpKyspCiAgICBmb3IgKGludCBqID0gMDsgaiA8PSAxMDA7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIGRwW2ldW2pdID0gSU5UX01BWDsKICAgICAgICB9CiAgICB3aGlsZSh0LS0pCiAgICB7CiAgICAgICAgc29sdmUoKTsKICAgIH0KfQ==