#include <bits/stdc++.h>
const int maxn = 59, maxm = 2509;
int n, m, q, x, fee[maxn], tot;
struct Edge {
  int to, next, c, f;
} edge[maxm << 1];
int head[maxn], cnt = 1;
inline void add(int from, int to, int c, int f) {
  edge[++cnt].to = to;
  edge[cnt].c = c, edge[cnt].f = f;
  edge[cnt].next = head[from];
  head[from] = cnt;
}
int dist[maxn], pre[maxn];
int spfa(void) {
  static int q[maxn * maxm], h, t;
  q[h = t = 0] = 1;
  bool vist[maxn];
  memset(vist, 0, (n + 1) * sizeof(bool)), vist[1] = 1;
  static int flow[maxn];
  memset(flow, 0, (n + 1) * sizeof(int)), flow[1] = 1e9;
  memset(dist, 0x3f, (n + 1) * sizeof(int)), dist[1] = 0;
  while (h <= t) {
    int node = q[h++];
    for (int i = head[node]; i; i = edge[i].next)
      if (edge[i].c && dist[edge[i].to] > dist[node] + edge[i].f) {
        dist[edge[i].to] = dist[node] + edge[i].f;
        flow[edge[i].to] = std::min(flow[node], edge[i].c);
        pre[edge[i].to] = i;
        if (!vist[edge[i].to]) q[++t] = edge[i].to, vist[edge[i].to] = 1;
      }
    vist[node] = 0;
  }
  return flow[n];
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 1, u, v, w; i <= m; ++i) {
    scanf("%d%d%d", &u, &v, &w);
    add(u, v, 1, w), add(v, u, 0, -w);
  }
  while (spfa()) {
    ++tot;
    fee[tot] = fee[tot - 1] + dist[n];
    for (int i = n; i != 1; i = edge[pre[i] ^ 1].to)
      --edge[pre[i]].c, ++edge[pre[i] ^ 1].c;
  }
  scanf("%d", &q);
  while (q--) {
    scanf("%d", &x);
    double ans = 1e9;
    for (int i = 1; i <= tot; ++i) ans = std::min(ans, double(fee[i] + x) / i);
    printf("%.8f\n", ans);
  }
}
