#include <bits/stdc++.h>
using namespace std;
const int Nmax = 2005, Inf = 0x3f3f3f3f;
vector<pair<int, int>> G[Nmax];
int values[Nmax];
long long psum[Nmax][Nmax];
int ssum[Nmax][Nmax];
long long dp[2][Nmax][Nmax];
vector<long long> getDistances(int N, int S) {
  priority_queue<pair<long long, int>> Q;
  vector<long long> dist(N + 1, 1LL << 62);
  dist[S] = 0;
  Q.push({0, S});
  while (!Q.empty()) {
    int node = Q.top().second;
    long long cost = -Q.top().first;
    Q.pop();
    if (cost > dist[node]) continue;
    for (pair<int, int>& p : G[node]) {
      if (dist[p.first] > cost + p.second) {
        dist[p.first] = cost + p.second;
        Q.push({-dist[p.first], p.first});
      }
    }
  }
  return dist;
}
vector<int> normalize(vector<long long> values) {
  int N = values.size() - 1;
  vector<pair<long long, int>> auxv(N);
  for (int i = 0; i < N; ++i) auxv[i] = {values[i + 1], i + 1};
  sort(auxv.begin(), auxv.end());
  vector<int> ret(N + 1);
  for (int i = 0, k = 1; i < N; ++i) {
    if (i > 0 && auxv[i].first != auxv[i - 1].first) ++k;
    ret[auxv[i].second] = k;
  }
  ret[0] = 0;
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  int N, M, S, T;
  cin >> N >> M >> S >> T;
  for (int i = 1; i <= N; ++i) cin >> values[i];
  while (M-- > 0) {
    int x, y, c;
    cin >> x >> y >> c;
    G[x].push_back({y, c});
    G[y].push_back({x, c});
  }
  vector<int> dist1 = normalize(getDistances(N, S)),
              dist2 = normalize(getDistances(N, T));
  int maxv1 = 0, maxv2 = 0;
  for (int i = 1; i <= N; ++i) {
    maxv1 = max(maxv1, dist1[i]);
    maxv2 = max(maxv2, dist2[i]);
  }
  for (int i = 1; i <= N; ++i) {
    dist1[i] = maxv1 - dist1[i] + 1;
    dist2[i] = maxv2 - dist2[i] + 1;
    psum[dist1[i]][dist2[i]] += values[i];
    ssum[dist1[i]][dist2[i]]++;
  }
  for (int i = 1; i <= maxv1; ++i) {
    for (int j = 1; j <= maxv2; ++j) {
      psum[i][j] += psum[i - 1][j] + psum[i][j - 1] - psum[i - 1][j - 1];
      ssum[i][j] += ssum[i - 1][j] + ssum[i][j - 1] - ssum[i - 1][j - 1];
    }
  }
  for (int i = 1; i <= maxv1; ++i) {
    for (int j = 1; j <= maxv2; ++j) {
      long long sum = psum[i][j] - psum[i - 1][j];
      bool can = ssum[i][j] - ssum[i - 1][j] > 0;
      dp[0][i][j] = dp[0][i - 1][j] + sum;
      if (can) dp[0][i][j] = max(dp[0][i][j], psum[i][j] - dp[1][i - 1][j]);
      sum = psum[i][j] - psum[i][j - 1];
      can = ssum[i][j] - ssum[i][j - 1] > 0;
      dp[1][i][j] = dp[1][i][j - 1] + sum;
      if (can) dp[1][i][j] = max(dp[1][i][j], psum[i][j] - dp[0][i][j - 1]);
    }
  }
  long long s1 = dp[0][maxv1][maxv2], s2 = psum[maxv1][maxv2] - s1;
  if (s1 == s2)
    cout << "Flowers\n";
  else if (s1 < s2)
    cout << "Cry\n";
  else
    cout << "Break a heart\n";
}
