#include <bits/stdc++.h>
using namespace std;
const int MAX = 2005;
vector<pair<int, int> > adj[MAX];
long long x[MAX], y[MAX], sum[MAX][MAX], dp[2][MAX][MAX];
int cnt[MAX][MAX], p[MAX];
vector<long long> vals;
set<pair<long long, int> > s;
void dij(int x, long long *d) {
  for (int i = 0; i < MAX; i++) d[i] = 1e16;
  d[x] = 0;
  s.insert(make_pair(d[x], x));
  while (!s.empty()) {
    int v = s.begin()->second;
    s.erase(s.begin());
    for (int i = 0; i < adj[v].size(); i++) {
      int u = adj[v][i].first, w = adj[v][i].second;
      if (d[u] > d[v] + w) {
        s.erase(make_pair(d[u], u));
        d[u] = d[v] + w;
        s.insert(make_pair(d[u], u));
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  int s, t;
  cin >> s >> t;
  s--;
  t--;
  for (int i = 0; i < n; i++) cin >> p[i];
  for (int i = 0; i < m; i++) {
    int u, v, w;
    cin >> u >> v >> w;
    u--;
    v--;
    adj[u].push_back(make_pair(v, w));
    adj[v].push_back(make_pair(u, w));
  }
  dij(s, x);
  dij(t, y);
  for (int i = 0; i < n; i++) vals.push_back(x[i]);
  sort(vals.begin(), vals.end());
  vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
  for (int i = 0; i < n; i++)
    x[i] = upper_bound(vals.begin(), vals.end(), x[i]) - vals.begin();
  vals.clear();
  for (int i = 0; i < n; i++) vals.push_back(y[i]);
  sort(vals.begin(), vals.end());
  vals.resize(unique(vals.begin(), vals.end()) - vals.begin());
  for (int i = 0; i < n; i++) {
    y[i] = upper_bound(vals.begin(), vals.end(), y[i]) - vals.begin();
    sum[x[i]][y[i]] += p[i];
    cnt[x[i]][y[i]]++;
  }
  n++;
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
      cnt[i][j] += cnt[i - 1][j] + cnt[i][j - 1] - cnt[i - 1][j - 1];
    }
  for (int i = n - 1; i >= 0; i--)
    for (int j = n - 1; j >= 0; j--) {
      if (cnt[i + 1][n] - cnt[i][n] - cnt[i + 1][j] + cnt[i][j] == 0)
        dp[0][i][j] = dp[0][i + 1][j];
      else
        dp[0][i][j] = max(dp[0][i + 1][j], dp[1][i + 1][j]) + sum[i + 1][n] -
                      sum[i][n] - sum[i + 1][j] + sum[i][j];
      if (cnt[n][j + 1] - cnt[n][j] - cnt[i][j + 1] + cnt[i][j] == 0)
        dp[1][i][j] = dp[1][i][j + 1];
      else
        dp[1][i][j] = min(dp[1][i][j + 1], dp[0][i][j + 1]) - sum[n][j + 1] +
                      sum[n][j] + sum[i][j + 1] - sum[i][j];
    }
  if (dp[0][0][0] > 0)
    cout << "Break a heart\n";
  else if (dp[0][0][0] < 0)
    cout << "Cry\n";
  else
    cout << "Flowers\n";
  return 0;
}
