#include<iostream>
#include<algorithm>
#include<cstring>
#define INF 111111111
using namespace std;

int n,m;
int a,b,c,d,cost[1000][1000][10];
int memo[1000];
int ans[1000][10];
int k,x,y,z;

void solve(){
  ans[x][z] = 0;

  while(true){
    int s = -1;

    for(int i=1;i<=m;i++){
      if(!memo[i] && (s == -1 || ans[i][z] < ans[s][z])) s = i;
    }

    if(s == -1) break;
    memo[s] = 1;

    for(int i=1;i<=m;i++) ans[i][z] = min(ans[i][z],ans[s][z] + cost[i][s][z]);
  }
}

int main(){

  while(true){
    cin >> n >> m;
    if(!n && !m) break;

    for(int i=0;i<1000;i++){
      for(int j=0;j<1000;j++) cost[i][j][0] = cost[i][j][1] = INF;
    }

    for(int i=0;i<n;i++){
      cin >> a >> b >> c >> d;
     
      cost[a][b][0]= cost[b][a][0] = c;
      cost[a][b][1] = cost[b][a][1] = d;

    }

    cin >> k;

    for(int i=0;i<k;i++){
      cin >> x >> y >> z;

      memset(memo,0,sizeof(memo));
      for(int i=0;i<1000;i++) ans[i][0] = ans[i][1] = INF;

      solve();
      cout << ans[y][z] << endl;

    }
  }
}