#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct node {
  int u, v, w, f, nxt;
  node() {}
  node(int u, int v, int w, int f, int nxt)
      : u(u), v(v), w(w), f(f), nxt(nxt) {}
} e[N << 2];
int h[N], idx = 1;
void link(int x, int y, int w) {
  e[++idx] = node(x, y, w, 1, h[x]);
  h[x] = idx;
  e[++idx] = node(y, x, -w, 0, h[y]);
  h[y] = idx;
}
int dis[N], pre[N];
bool vis[N];
int n, m;
int Mincost = 0;
int spfa() {
  memset(dis, 0x3f, sizeof dis);
  memset(vis, 0, sizeof vis);
  memset(pre, 0, sizeof pre);
  queue<int> q;
  while (q.size()) q.pop();
  q.push(1);
  dis[1] = 0;
  while (q.size()) {
    int t = q.front();
    q.pop();
    vis[t] = 0;
    for (int i = h[t]; i; i = e[i].nxt) {
      int v = e[i].v, w = e[i].w;
      if (e[i].f && dis[v] > dis[t] + w) {
        dis[v] = dis[t] + w;
        pre[v] = i;
        if (vis[v] == 0) {
          vis[v] = 1;
          q.push(v);
        }
      }
    }
  }
  if (dis[n] == 0x3f3f3f3f) return 0;
  Mincost += dis[n];
  for (int i = pre[n]; i; i = pre[e[i].u]) e[i].f--, e[i ^ 1].f++;
  return 1;
}
int main() {
  cin >> n >> m;
  for (int i = 1; i <= m; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    link(x, y, z);
  }
  vector<int> v;
  v.clear();
  while (spfa()) {
    v.push_back(Mincost);
  }
  int m;
  cin >> m;
  while (m--) {
    int x;
    cin >> x;
    double ans = 1e18;
    for (int i = 0; i < v.size(); i++)
      ans = min(ans, 1.0 * (v[i] + x) / (i + 1));
    printf("%.10f\n", ans);
  }
  return 0;
}
