#include<cstdio>
#include<queue>
#include <algorithm>
using namespace std;



int d[100];
bool used[100];

int n,m,k;
int INF=200000000;



int main(){

	int i,j;
	int a,b,c,e;

	int cost[100][100];
	int time[100][100];


	scanf("%d %d",&n,&m);

	fill((int*)cost,(int*)(cost+m),INF);
	fill((int*)time,(int*)(time+m),INF);

	/*
	fill(d,d+m,INF);
	memset(used,0,sizeof(used));
	*/

	for(i=0;i<n;i++){
		scanf("%d %d %d %d",&a,&b,&c,&e);
		a--;
		b--;
		cost[a][b]=cost[b][a]=c;
		time[a][b]=time[b][a]=e;
	}

	scanf("%d",&k);

	for(i=0;i<k;i++){
		scanf("%d %d %d",&a,&b,&c);
		a--;
		b--;
		
		fill(d,d+m,INF);
		fill(used,used+m,false);

		d[a]=0;
		
		
		while(true){
			int v=-1;
			
			//printf("-\n");

			for(j=0;j<m;j++){
				if(!used[j] && (v==-1 || d[j]<d[v])) v=j;
			}	
			
			if(v==-1)break;
			used[v]=true;

			if(c) for(j=0;j<m;j++) d[j]=min(d[j],d[v]+time[v][j]);
			else  for(j=0;j<m;j++) d[j]=min(d[j],d[v]+cost[v][j]);
		}
		printf("%d\n",d[b]);
		
		

	}
	scanf("%d %d",&a,&b);


	return 0;
}



	//scanf("%s",&i);