#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int gi() {
  int x = 0, o = 1;
  char ch = getchar();
  while ((ch < '0' || ch > '9') && ch != '-') ch = getchar();
  if (ch == '-') o = -1, ch = getchar();
  while (ch >= '0' && ch <= '9') x = x * 10 + ch - '0', ch = getchar();
  return x * o;
}
int to[N], ww[N], cc[N], nxt[N], h[N], pre[N], id[N], flow[N], dis[N], n, m, tt,
    cost[N];
bool vis[N];
void adde(int u, int v, int w, int c) {
  static int tt = 1;
  to[++tt] = v;
  ww[tt] = w;
  cc[tt] = c;
  nxt[tt] = h[u];
  h[u] = tt;
  to[++tt] = u;
  cc[tt] = -c;
  nxt[tt] = h[v];
  h[v] = tt;
}
bool spfa() {
  for (int i = 1; i <= n; i++) dis[i] = 1e9, vis[i] = 0;
  queue<int> q;
  q.push(1);
  dis[1] = 0;
  flow[1] = 1e9;
  while (!q.empty()) {
    int u = q.front();
    q.pop();
    vis[u] = 0;
    for (int i = h[u], v; v = to[i], i; i = nxt[i])
      if (ww[i] && dis[v] > dis[u] + cc[i]) {
        dis[v] = dis[u] + cc[i];
        pre[v] = u;
        id[v] = i;
        if (!vis[v]) vis[v] = 1, q.push(v);
      }
  }
  if (dis[n] == 1e9) return 0;
  ++tt;
  cost[tt] = cost[tt - 1];
  for (int i = n; i; i = pre[i])
    --ww[id[i]], ++ww[id[i] ^ 1], cost[tt] += cc[id[i]];
  return 1;
}
int main() {
  cin >> n >> m;
  for (int i = 1, u, v, w; i <= m; i++)
    u = gi(), v = gi(), w = gi(), adde(u, v, 1, w);
  while (spfa())
    ;
  int q = gi();
  while (q--) {
    int x = gi();
    double ans = 1e9;
    for (int i = 1; i <= tt; i++) ans = min(ans, 1.0 * (cost[i] + x) / i);
    printf("%.10lf\n", ans);
  }
  return 0;
}
