#include <bits/stdc++.h>
using namespace std;
const int maxn = 200 * 1000 + 10;
int n, m, s, u, v, h[maxn];
long long w[maxn], r[maxn], dp[maxn];
bool has[maxn], mark[maxn];
vector<int> vec[maxn];
void dfs(int x, int p) {
  mark[x] = 1;
  for (auto w : vec[x]) {
    if (mark[w]) {
      if (w != p) has[x] = 1;
    } else {
      dfs(w, x);
      r[x] += r[w];
      has[x] |= has[w];
    }
  }
  if (has[x]) r[x] += w[x];
}
void solve(int x) {
  mark[x] = 1;
  for (auto w : vec[x]) {
    if (!mark[w]) {
      solve(w);
      dp[x] = max(dp[x], dp[w]);
    }
  }
  if (!has[x]) dp[x] += w[x];
}
int main() {
  ios::sync_with_stdio(0);
  scanf("%d %d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%lld", &w[i]);
  for (int i = 0; i < m; i++) {
    scanf("%d %d", &u, &v);
    u--;
    v--;
    vec[u].push_back(v);
    vec[v].push_back(u);
  }
  scanf("%d", &s);
  s--;
  dfs(s, -1);
  memset(mark, 0, sizeof mark);
  solve(s);
  printf("%lld", r[s] + dp[s]);
  return 0;
}
