#include<iostream>

int n, m, a, b, k, p, q, r, *ans;
int **w[2],**d[2],**pre_vertex[2];

void solve(){
	for(int z=0; z<2; z++){
		for(int i=0; i<m; i++){
			for(int j=0; j<m; j++)
				d[z][i][j] = w[z][i][j];
		}
		for(int i=0; i<m; i++){
			for(int j=0; j<m; j++){
				for(int l=0; l<m; l++){
					int dis = d[z][j][i]+d[z][i][l];
					if(dis<d[z][j][l])
						d[z][j][l] = dis;
				}
			}
		}
	}
}

int main(){
	while(true){
		std::cin >> n >> m;
		if(!n && !m)
			return 0;
		for(int l=0; l<2; l++){
			w[l] = new int*[m];
			d[l] = new int*[m];
			for(int i=0; i<m; i++){
				w[l][i] = new int[m];
				d[l][i] = new int[m];
				for(int j=0; j<m; j++)
					w[l][i][j] = 1000000000;
			}
		}
		for(int i=0; i<n; i++){
			std::cin >> a >> b;
			std::cin >> w[0][a-1][b-1] >> w[1][a-1][b-1];
			w[0][b-1][a-1] = w[0][a-1][b-1];
			w[1][b-1][a-1] = w[1][a-1][b-1];
		}
		solve();
		std::cin >> k;
		ans = new int[k];
		for(int i=0; i<k; i++){
			std::cin >> p >> q >> r;
			ans[i] = d[r][p-1][q-1];
		}
		for(int i=0; i<k; i++)
			std::cout << ans[i] << std::endl;
		for(int i=0; i<2; i++){
			for(int j=0; j<m; j++){
				delete[] w[i][j];
				delete[] d[i][j];
			}
			delete[] w[i];
			delete[] d[i];
		}
		delete[] ans;
	}
}