#include <bits/stdc++.h>
using namespace std;
int const N = 50, M = N * N * 2, INF = 2e9, Q = 100000;
int E, Pa[N], SR, TR, DS[N];
vector<int> G[N];
struct ED {
  int v, cp, cs;
  ED() {}
  ED(int a, int b, int c) : v(a), cp(b), cs(c) {}
} Ed[M];
bool path() {
  for (int i = 0; i < (int)(N); ++i) DS[i] = INF;
  DS[SR] = 0;
  for (int i = 0; i < (int)(N); ++i)
    for (int j = 0; j < (int)(E); ++j) {
      int u = Ed[j ^ 1].v, v = Ed[j].v;
      if (DS[u] + Ed[j].cs < DS[v] && DS[u] != INF && Ed[j].cp)
        DS[v] = DS[u] + Ed[j].cs, Pa[v] = j;
    }
  return DS[TR] != INF;
}
pair<int, int> fix() {
  pair<int, int> an(2e9, 0);
  int v = TR;
  while (v != SR) {
    int e = Pa[v];
    an.first = min(an.first, Ed[e].cp);
    an.second += Ed[e].cs;
    v = Ed[e ^ 1].v;
  }
  v = TR;
  while (v != SR) {
    int e = Pa[v];
    Ed[e].cp -= an.first;
    Ed[e ^ 1].cp += an.first;
    v = Ed[e ^ 1].v;
  }
  an.second *= an.first;
  return an;
}
inline pair<int, int> MF(int a, int b) {
  SR = a, TR = b;
  pair<int, int> an(0, 0);
  while (path()) {
    pair<int, int> t = fix();
    an.first += t.first, an.second += t.second;
  }
  return an;
}
inline void aded(int a, int b, int w1 = 1, int cst = 0, int w2 = 0) {
  Ed[E] = ED(b, w1, cst);
  Ed[E + 1] = ED(a, w2, -cst);
  G[a].push_back(E++);
  G[b].push_back(E++);
}
double an[Q + 1];
int main() {
  int n, m;
  scanf("%d%d", &n, &m);
  for (int i = 0; i < (int)(m); ++i) {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    aded(a - 1, b - 1, 1, c);
  }
  SR = 0;
  TR = n - 1;
  vector<int> v;
  while (path()) v.push_back(fix().second);
  v.push_back(INF);
  int z = 0;
  an[0] = v[0];
  for (int i = 1; i < (int)(v.size()); ++i) {
    int nz = min(z + (long long)(v[i] - v[i - 1]) * i, (long long)Q);
    while (z < nz) {
      ++z;
      an[z] = an[z - 1] + 1.0 / i;
    }
  }
  int q;
  scanf("%d", &q);
  while (q--) {
    int t;
    scanf("%d", &t);
    printf("%.6lf\n", an[t]);
  }
}
