#include <bits/stdc++.h>
using namespace std;
int tot, h[52], cnt = 1;
struct Edge {
  int to, next, s, c;
} e[52 * 52 << 4];
inline void AddEdge(int x, int y, int s, int c) {
  e[++cnt] = (Edge){y, h[x], s, c};
  h[x] = cnt;
  e[++cnt] = (Edge){x, h[y], 0, -c};
  h[y] = cnt;
}
int px[52], pre[52];
long long dis[52];
queue<int> q;
bool ins[52];
bool SPFA(int S, int T) {
  int i, x, y;
  for (i = 1; i <= tot; i++) dis[i] = -0x3f3f3f3f3f3f3f3fll;
  dis[S] = 0;
  q.push(S);
  ins[S] = 1;
  px[S] = 0;
  while (!q.empty()) {
    x = q.front();
    q.pop();
    ins[x] = 0;
    for (i = h[x]; i; i = e[i].next)
      if (e[i].s && (dis[y = e[i].to] < dis[x] + e[i].c)) {
        dis[y] = dis[x] + e[i].c;
        pre[y] = i;
        px[y] = x;
        if (!ins[y]) ins[S] = 1, q.push(y);
      }
  }
  return (dis[T] > (-0x3f3f3f3f3f3f3f3fll));
}
int n, m, Q, all = 0;
long long ans[52];
inline void Adjust(int T) {
  ++all;
  for (int y = T; px[y]; y = px[y]) e[pre[y]].s -= 1, e[pre[y] ^ 1].s += 1;
  ans[all] = ans[all - 1] + dis[T];
}
double anss = 0.0;
int main() {
  scanf("%d%d", &n, &m);
  int i, x, y, v;
  for (i = 1; i <= m; i++) {
    scanf("%d%d%d", &x, &y, &v);
    AddEdge(y, x, 1, -v);
  }
  tot = n;
  while (SPFA(n, 1)) Adjust(1);
  scanf("%d", &Q);
  while (Q--) {
    scanf("%d", &x);
    anss = 1e20;
    for (i = 1; i <= all; i++) anss = min(anss, (x - ans[i]) / (1.0 * i));
    printf("%.12lf\n", anss);
  }
  return 0;
}
