#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

#define loop(i,a,b) for(int i=(a); i<(int)(b); i++)
#define rep(i,b) loop(i,0,b)


struct edge {
    int from,to,money,time;
};
int d[2][101][101];

int main(){
    int n,m;
    while(cin>>n>>m, n|m){
        for(auto& arr:d[0]) for(int& i:arr) i=1<<28;
        for(auto& arr:d[1]) for(int& i:arr) i=1<<28;
        rep(i,m+1) d[0][i][i]=0;
        rep(i,m+1) d[1][i][i]=0;
        rep(i,n){
            int f,t,mo,ti; cin>>f>>t>>mo>>ti;
            d[0][f][t]=d[0][t][f]=mo;
            d[1][f][t]=d[1][t][f]=ti;
        }
        rep(k,m+1)rep(i,m+1)rep(j,m+1){
            d[0][i][j]=min(d[0][i][j], d[0][i][k]+d[0][k][j]);
            d[1][i][j]=min(d[1][i][j], d[1][i][k]+d[1][k][j]);
        }
        int k; cin>>k;
        rep(i,k){
            int p,q,r; cin>>p>>q>>r;
            cout<<d[r][p][q]<<endl;
        }
    }
}