#include<iostream>
#include<vector>

#define INF 1000000;

struct line{
	int to,cost,time;
};

int n,m;
int s[100];
std::vector<std::vector<line> >sta(100);

int calc(int i,int j,int r){
	for(int k=0;k<sta[i].size();k++){
		if(r==0){
			if(sta[i][k].cost+s[i]<s[sta[i][k].to]){
				s[sta[i][k].to]=s[i]+sta[i][k].cost;
				calc(sta[i][k].to,j,r);
			}
		}else if(r==1){
			if(sta[i][k].time+s[i]<s[sta[i][k].to]){
				s[sta[i][k].to]=s[i]+sta[i][k].time;
				calc(sta[i][k].to,j,r);
			}
		}
	}
	return s[j];
}

int main(){
	while(std::cin>>n>>m){
		if(n==0&&m==0)break;
		for(int i=0;i<n;i++){
			int a,b,c,d;
			line e;
			std::cin>>a>>b>>c>>d;
			e.to=b,e.cost=c,e.time=d;
			sta[a].push_back(e);
			e.to=a;
			sta[b].push_back(e);
		}
		int k;
		std::cin>>k;
		for(int i=0;i<k;i++){
			int p,q,r;
			std::cin>>p>>q>>r;
			for(int j=0;j<=m;j++)s[j]=INF;s[p]=0;
			std::cout<<calc(p,q,r)<<std::endl;
		}
	}
	return 0;
}