#include<cstdio>
#include<algorithm>
#include<functional>
#include<queue>
#define F1 first.first
#define F2 first.second
#define F3 second.first
#define F4 second.second
#define MM 2000000000
using namespace std;
typedef pair<int,int> P1;
typedef pair<P1,P1> P2;
P2 p[6000];
int st[102];
int leng[101],flg[101];
int main(void)
{
	int n,m,a,b,co,ti,i,j,pp,q,r,x,p1,p2,le,xx,n2,k;
	P1 ppp;
	while(1)	{
		scanf("%d %d",&n,&m);
		if(n==0 && m==0)	break;
		priority_queue<P1,vector<P1>,greater<P1> >qu;	
		for(i=0;i<n;i++)	{
			scanf("%d %d %d %d",&a,&b,&co,&ti);
			p[i].F1=a;	p[i].F2=b;	p[i].F3=co;	p[i].F4=ti;
			p[i+n].F1=b; p[i+n].F2=a; p[i+n].F3=co; p[i+n].F4=ti;
		}
		n2=n*2;
		sort(p,p+n2);
//		for(i=0;i<n2;i++)	printf("i=%d %d %d %d %d\n",i,p[i].F1,p[i].F2,p[i].F3,p[i].F4);
		for(i=1;i<=m;i++)	st[i]=-1;
		for(i=0;i<n2;i++)	{
			if(st[p[i].F1]==-1)	 st[p[i].F1]=i;
		}
		st[m+1]=n2;
		scanf("%d",&k);
		for(i=0;i<k;i++)	{
			scanf("%d %d %d",&p1,&q,&r);
			for(j=1;j<=m;j++)	{
				leng[j]=MM;	flg[j]=0;
			}
			leng[p1]=0;	qu.push(P1(leng[p1],p1));
			while(1)	{
				while(1)	{
					ppp=qu.top();	qu.pop();
					x=ppp.second;	xx=ppp.first;
					if(flg[x]==0)	break;
				}
				flg[x]=1;
				if(x==q)	break;
				for(j=st[x];j<st[x+1];j++)	{
					if(flg[p[j].F2]==0)	{
						if(r==0)	co=p[j].F3;
						else co=p[j].F4;
						qu.push(P1(xx+co,p[j].F2));
					}
				}
			}
			printf("%d\n",xx);
			while(qu.size())	qu.pop();
		}
	}
	return 0;
}
