#include <bits/stdc++.h>
using namespace std;
const int N = 2222;
const long long inf = 1ll << 62;
int n, m, s, t, rks[N], rkt[N];
long long gra[N][N], p[N], dist[N], dists[N], distt[N];
bool used[N], nws[N][N], nwt[N][N];
vector<pair<long long, int> > vs, vt;
long long dps[N][N], dpt[N][N];
long long calc_s(int x, int y) {
  if (x == n) return 0;
  if (!nws[x][y]) return dps[x + 1][y];
  long long nxc = p[vs[x].second], ans = nxc + dps[x + 1][y];
  for (int i = x + 1; i <= n; ++i) {
    ans = max(ans, nxc - dpt[i][y]);
    if (nws[i][y]) break;
  }
  return ans;
}
long long calc_t(int x, int y) {
  if (y == N) return 0;
  if (!nwt[x][y]) return dpt[x][y + 1];
  long long nxc = p[vt[y].second], ans = nxc + dpt[x][y + 1];
  for (int i = y + 1; i <= n; ++i) {
    ans = max(ans, nxc - dps[x][i]);
    if (nwt[x][i]) break;
  }
  return ans;
}
void get_dist(int s) {
  for (int i = 0; i < (n); ++i) dist[i] = inf, used[i] = 0;
  dist[s] = 0;
  for (int i = 0; i < (n); ++i) {
    int x = -1;
    for (int j = 0; j < (n); ++j)
      if (!used[j] and (x == -1 or dist[j] < dist[x])) x = j;
    used[x] = 1;
    for (int j = 0; j < (n); ++j) dist[j] = min(dist[j], dist[x] + gra[x][j]);
  }
}
int main() {
  cin >> n >> m >> s >> t, --s, --t;
  for (int i = 0; i < (n); ++i) cin >> p[i];
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n); ++j)
      if (i != j) gra[i][j] = inf;
  for (int i = 0; i < (m); ++i) {
    int u, v, w;
    cin >> u >> v >> w, --u, --v;
    gra[u][v] = min(gra[u][v], (long long)w);
    gra[v][u] = min(gra[v][u], (long long)w);
  }
  get_dist(s);
  for (int i = 0; i < (n); ++i) dists[i] = dist[i];
  get_dist(t);
  for (int i = 0; i < (n); ++i) distt[i] = dist[i];
  for (int i = 0; i < (n); ++i)
    vs.push_back(make_pair(dists[i], i)), vt.push_back(make_pair(distt[i], i));
  sort(vs.begin(), vs.end()), sort(vt.begin(), vt.end());
  for (int i = 0; i < (n); ++i) rks[vs[i].second] = i, rkt[vt[i].second] = i;
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (n + 1); ++j) nws[i][j] = (rkt[vs[i].second] >= j);
  for (int i = 0; i < (n + 1); ++i)
    for (int j = 0; j < (n); ++j) nwt[i][j] = (rks[vt[j].second] >= i);
  for (int i = n; ~i; --i)
    for (int j = n; ~j; --j) {
      dps[i][j] = calc_s(i, j);
      dpt[i][j] = calc_t(i, j);
    }
  long long ans = dps[0][0];
  if (ans > 0)
    puts("Break a heart");
  else if (ans == 0)
    puts("Flowers");
  else
    puts("Cry");
}
