#include <stdio.h>
#include <math.h>
#include <stdlib.h>

typedef struct _pilha{
    int valor, tam;
    struct _pilha *prox;
}pilha;

pilha* criaPilha(){
    pilha *p = (pilha *)malloc(sizeof(pilha));
    p->valor = 0;
    p->tam = 0;
    p->prox = NULL;
    return p;
}

pilha* addPilha(pilha *p, int valor, int tam){
    pilha *t = criaPilha();
    t->valor = valor;
    t->prox = p;
    t->tam = tam;
    return t;
}

int distance(pilha *p[][2], int a, int b){
    int result = 0;
    pilha* temp = p[a][0];
    
    while(temp->prox!=NULL){
        if(temp->valor==b){
            result += temp->tam;
            break;
        }
        temp = temp->prox;
    }
    if(temp->valor!=b){
        temp = p[temp->valor][0];
        result += temp->tam;
        while(temp->prox!=NULL){
            if(temp->valor==b){
                result += temp->tam;
                break;
            }
        }
    }
    
    return result;
}

int main() {
    int n, t; scanf("%d %d", &n, &t);
    pilha *p[n][2];
    
    for(int i=0; i<n; i++){
        int a, b, c; scanf("%d %d %d", &a, &b, &c);
        p[a-1][0] = addPilha(p[a-1][0], b-1, c);
        p[b-1][1] = addPilha(p[b-1][1], a-1, c);
    }
    while(t--){
        int u; scanf("%d", &u);
        int array[u], result = 0;
        for(int i=0; i<u; i++){
            scanf("%d", &array[i]);
        }
        for(int i=0; i<u-1; i++){
            for(int j=i+1; j<u; j++){
                result += distance(p, array[i], array[j]);
            }
        }
        printf("%d\n", result);
    }
    
    return 0;
}