#include <iostream>
#include <climits>
#include <vector>

using namespace std;

typedef vector< int > VI;
typedef vector< VI > VVI;
typedef vector< VVI > VVVI;

const int INF = INT_MAX / 2;

int main()
{
	cin.tie( 0 );
	ios::sync_with_stdio( false );

	while ( true )
	{
		int n, m;
		cin >> n >> m;

		if ( !( n | m ) )
		{
			break;
		}

		VVVI G( m, VVI( m, VI( 2, INF ) ) );

		for ( int i = 0; i < m; i++ )
		{
			G[i][i][0] = G[i][i][1] = 0;
		}

		for ( int i = 0; i < n; i++ )
		{
			int a, b, cost, time;
			cin >> a >> b >> cost >> time;

			a--;
			b--;

			G[a][b][0] = G[b][a][0] = cost;
			G[a][b][1] = G[b][a][1] = time;
		}

		for ( int k = 0; k < m; k++ )
		{
			for ( int i = 0; i < m; i++ )
			{
				for ( int j = 0; j < m; j++ )
				{
					G[i][j][0] = min( G[i][j][0], G[i][k][0] + G[k][j][0] );
					G[i][j][1] = min( G[i][j][1], G[i][k][1] + G[k][j][1] );
				}
			}
		}

		int k;
		cin >> k;

		for ( int i = 0; i < k; i++ )
		{
			int p, q, r;
			cin >> p >> q >> r;

			p--;
			q--;

			cout << G[p][q][r] << endl;
		}
	}

	return 0;
}