#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
long long f[505][505];
int main()
{
int n,m;
cin >> n >> m;
for(int i = 0;i <= n;i++)
{
for(int j = 0;j <= n;j++)
{
if(i == j) continue;
f[i][j] = 4e18;
}
}
while(m--)
{
long long a,b,c;
cin >> a >> b >> c;
f[a][b] = min(f[a][b],c);
f[b][a] = min(f[b][a],c);
}
long long k,t;
cin >> k >> t;
while(k--)
{
int a;
cin >> a;
f[0][a] = min(f[0][a],t);
f[a][0] = min(f[a][0],0ll);
}
for(int k = 0;k <= n;k++)
{
for(int i = 0;i <= n;i++)
{
for(int j = 0;j <= n;j++)
{
f[i][j] = min(f[i][j],f[i][k] + f[k][j]);
}
}
}
int q;
cin >> q;
while(q--)
{
int op;
cin >> op;
if(op == 1)
{
long long x,y,w;
cin >> x >> y >> w;
f[x][y] = min(f[x][y],w);
f[y][x] = min(f[y][x],w);
for(int i = 0;i <= n;i++)
{
f[x][i] = min(f[x][i],f[x][y] + f[y][i]);
}
for(int i = 0;i <= n;i++)
{
f[i][x] = f[x][i];
}
for(int i = 0;i <= n;i++)
{
f[y][i] = min(f[y][i],f[y][x] + f[x][i]);
}
for(int i = 0;i <= n;i++)
{
f[i][y] = f[y][i];
}
}
else if(op == 2)
{
int x;
cin >> x;
f[0][x] = min(f[0][x],t);
f[x][0] = min(f[x][0],0ll);
for(int i = 0;i <= n;i++)
{
f[x][i] = min(f[x][i],f[x][0] + f[0][i]);
}
for(int i = 0;i <= n;i++)
{
f[i][x] = f[x][i];
}
for(int i = 0;i <= n;i++)
{
f[0][i] = min(f[0][i],f[0][x] + f[x][i]);
}
for(int i = 0;i <= n;i++)
{
f[i][0] = f[0][i];
}
}
else
{
long long sum = 0;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= n;j++)
{
if(f[i][j] < 4e18)
{
sum += f[i][j];
}
}
}
cout << sum << endl;
}
}
return 0;
}