#include <iostream>
#include <queue>
using namespace std;
struct Line{
        int a;
        int b;
        int cost;
        int time;
};
int Min(int x,int y){
        return x<y?x:y;
}
#define Max 2000000000
int main(){
        int N,M;
        Line lines[3000];
        cin >> N >>M;
        for(int i=0 ; i<N ; i++ ){
                cin >> lines[i].a >> lines[i].b ;
                cin >> lines[i].cost >> lines[i].time;
        }
        int K;
        cin >> K;
        for(int i=0 ; i<K ; i++ ){
                int to,from,r;
                cin >> from >> to>>r;
                queue <int> circle;
                circle.push(from);
                int dp[3000];
                for(int i=0 ; i<=M ; i++ )
                        dp[i]=Max;
                dp[from]=0;
                while(circle.size()!=0){
                        int now=circle.front();
                        for(int i=0 ; i<N ; i++ ){
                                if(now==lines[i].a){
                                        int next=lines[i].b;
                                        if(!r)
                                                dp[next]=Min(dp[next],dp[now]+lines[i].cost);
                                        else
                                                dp[next]=Min(dp[next],dp[now]+lines[i].time);
                                        circle.push(lines[i].b);
                                }
                        }
                        circle.pop();
                }
                cout << dp[to] << endl;
        }
        return 0;
}

