#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void read(T &x) {
  x = 0;
  char c = getchar();
  bool flag = false;
  while (!isdigit(c)) {
    if (c == '-') flag = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  if (flag) x = -x;
}
int n, m, q;
int dis[5010];
bool vis[5010];
vector<pair<int, int> > ve;
struct edge {
  int to, nxt, v, c;
  edge(int x = 0, int y = 0, int z = 0, int w = 0) {
    to = x, nxt = y, v = z, c = w;
  }
} e[5010];
int head[5010], edge_cnt = 1;
void add(int from, int to, int val, int cost) {
  e[++edge_cnt] = edge(to, head[from], val, cost), head[from] = edge_cnt;
  e[++edge_cnt] = edge(from, head[to], 0, -cost), head[to] = edge_cnt;
}
bool spfa() {
  for (int i = 1; i <= n; ++i) vis[i] = false, dis[i] = 1000000000;
  queue<int> q;
  q.push(1), vis[1] = true, dis[1] = 0;
  while (!q.empty()) {
    int x = q.front();
    q.pop(), vis[x] = false;
    for (int i = head[x]; i; i = e[i].nxt) {
      int y = e[i].to, c = e[i].c;
      if (dis[y] <= dis[x] + c || !e[i].v) continue;
      dis[y] = dis[x] + c;
      if (!vis[y]) q.push(y), vis[y] = true;
    }
  }
  return dis[n] != 1000000000;
}
int dfs(int x, int lim) {
  if (x == n) return lim;
  vis[x] = true;
  int res = lim, flow;
  for (int i = head[x]; i; i = e[i].nxt) {
    int y = e[i].to, v = e[i].v;
    if (dis[y] != dis[x] + e[i].c || vis[y] || !v) continue;
    if (flow = dfs(y, min(res, v))) {
      res -= flow, e[i].v -= flow, e[i ^ 1].v += flow;
      if (!res) break;
    }
  }
  return lim - res;
}
void dinic() {
  int flow, v = 0, s = 0;
  while (spfa())
    while (flow = dfs(1, 1000000000))
      v += flow, s += flow * dis[n], ve.push_back(make_pair(v, s));
}
int main() {
  read(n), read(m);
  for (int i = 1; i <= m; ++i) {
    int x, y, v;
    read(x), read(y), read(v), add(x, y, 1, v);
  }
  dinic(), read(q);
  while (q--) {
    int x;
    double v = 1000000000;
    read(x);
    for (int i = 0; i < ve.size(); ++i)
      v = min(v, (double)(x + ve[i].second) / ve[i].first);
    printf("%.10lf\n", v);
  }
  return 0;
}
