#include <bits/stdc++.h>
using namespace std;
int n, m, s, t;
int p[2005];
vector<int> adj[2005];
vector<int> wht[2005];
long long sum1[2005][2005], sum2[2005][2005];
int cnt1[2005][2005], cnt2[2005][2005];
long long dp[2005][2005][2];
priority_queue<pair<long long, int> > q;
vector<pair<long long, int> > diik(int s) {
  while (q.size()) q.pop();
  long long dist[2005];
  memset(dist, 63, sizeof(dist));
  dist[s] = 0, q.push(make_pair(0, s));
  vector<pair<long long, int> > v;
  while (q.size()) {
    int u = q.top().second;
    long long d = -q.top().first;
    q.pop();
    if (d > dist[u]) continue;
    for (int i = 0; i < adj[u].size(); ++i) {
      int v = adj[u][i];
      int w = wht[u][i];
      if (d + w < dist[v]) {
        dist[v] = d + w;
        q.push(make_pair(-dist[v], v));
      }
    }
  }
  for (int i = 1; i <= n; ++i) v.push_back(make_pair(dist[i], i));
  sort(v.begin(), v.end());
  return v;
}
void precalc(vector<pair<long long, int> > v1, vector<pair<long long, int> > v2,
             long long sum[2005][2005], int cnt[2005][2005]) {
  bool no[2005];
  for (int y = 0; y <= n; ++y) {
    memset(no, 0, sizeof(no));
    for (int i = 0; i < y; ++i) no[v2[i].second] = 1;
    for (int x = 1; x <= n; ++x) {
      sum[x][y] =
          sum[x - 1][y] + (no[v1[x - 1].second] ? 0 : p[v1[x - 1].second]);
      cnt[x][y] = cnt[x - 1][y] + (no[v1[x - 1].second] ? 0 : 1);
    }
  }
}
long long qmn[2005];
int qi[2005];
int main() {
  scanf("%d%d%d%d", &n, &m, &s, &t);
  for (int i = 1; i <= n; ++i) scanf("%d", p + i);
  for (int i = 0; i < m; ++i) {
    int u, v, w;
    scanf("%d%d%d", &u, &v, &w);
    adj[u].push_back(v);
    wht[u].push_back(w);
    adj[v].push_back(u);
    wht[v].push_back(w);
  }
  vector<pair<long long, int> > vs, vt;
  vs = diik(s), vt = diik(t);
  precalc(vs, vt, sum1, cnt1);
  precalc(vt, vs, sum2, cnt2);
  for (int i = 0; i < 2005; ++i)
    for (int j = 0; j < 2005; ++j)
      dp[i][j][0] = -(1ll << 60), dp[i][j][1] = (1ll << 60);
  for (int i = 0; i <= n; ++i) dp[n][i][0] = 0, dp[i][n][1] = 0;
  for (int i = 0; i <= n; ++i) qi[i] = n, qmn[i] = (1ll << 60);
  for (int y = n; y >= 0; --y) {
    long long mx = -(1ll << 60);
    int h = n;
    for (int x = n; x >= 0; --x) {
      while (h > x && cnt1[h][y] - cnt1[x][y])
        mx = max(mx, dp[h][y][1] + sum1[h][y]), h--;
      if (x < n) {
        if (mx == -(1ll << 60))
          dp[x][y][0] = 0;
        else
          dp[x][y][0] = max(dp[x][y][0], mx - sum1[x][y]);
      }
      while (qi[x] > y && cnt2[qi[x]][x] - cnt2[y][x])
        qmn[x] = min(qmn[x], dp[x][qi[x]][0] - sum2[qi[x]][x]), qi[x]--;
      if (y < n) {
        if (qmn[x] == (1ll << 60))
          dp[x][y][1] = 0;
        else
          dp[x][y][1] = min(dp[x][y][1], qmn[x] + sum2[y][x]);
      }
    }
  }
  if (dp[0][0][0] == 0)
    printf("Flowers");
  else if (dp[0][0][0] > 0)
    printf("Break a heart");
  else
    printf("Cry");
}
