#include <bits/stdc++.h>
using namespace std;
const long long inf = 20000000000;
const long long inff = 200000000000000000;
int n, m, s, t, d1[10000], d2[10000];
long long f[2005][2005], f1[2][2005][2005], sum[2005][2005], p[2005][2005],
    a[10000];
set<long long> s1;
map<long long, long long> mapp;
void dijkstra1(int x) {
  s1.clear();
  mapp.clear();
  long long p[10000], bo[10000], m = 0;
  for (int i = 0; i <= n; i++) p[i] = inff, bo[i] = 0;
  p[x] = 0;
  for (int i = 1; i < n; i++) {
    int minp = 0;
    for (int i = 1; i <= n; i++)
      if (!bo[i] && p[i] < p[minp]) minp = i;
    bo[minp] = 1;
    for (int i = 1; i <= n; i++)
      if (f[minp][i] < inf) p[i] = min(p[i], p[minp] + f[minp][i]);
  }
  for (int i = 1; i <= n; i++) s1.insert(p[i]);
  for (set<long long>::iterator it = s1.begin(); it != s1.end(); ++it)
    mapp[*it] = ++m;
  for (int i = 1; i <= n; i++) d1[i] = mapp[p[i]];
}
void dijkstra2(int x) {
  s1.clear();
  mapp.clear();
  long long p[10000], bo[10000], m = 0;
  for (int i = 0; i <= n; i++) p[i] = inff, bo[i] = 0;
  p[x] = 0;
  for (int i = 1; i < n; i++) {
    int minp = 0;
    for (int i = 1; i <= n; i++)
      if (!bo[i] && p[i] < p[minp]) minp = i;
    bo[minp] = 1;
    for (int i = 1; i <= n; i++)
      if (f[minp][i] < inf) p[i] = min(p[i], p[minp] + f[minp][i]);
  }
  for (int i = 1; i <= n; i++) s1.insert(p[i]);
  for (set<long long>::iterator it = s1.begin(); it != s1.end(); ++it)
    mapp[*it] = ++m;
  for (int i = 1; i <= n; i++) d2[i] = mapp[p[i]];
}
int count(int x, int y, int xx, int yy) {
  return p[xx][yy] - p[x - 1][yy] - p[xx][y - 1] + p[x - 1][y - 1];
}
long long summ(int x, int y, int xx, int yy) {
  return sum[xx][yy] - sum[x - 1][yy] - sum[xx][y - 1] + sum[x - 1][y - 1];
}
int main() {
  scanf("%d%d%d%d", &n, &m, &s, &t);
  for (int i = 1; i <= n; i++) scanf("%lld", &a[i]);
  for (int i = 1; i < n; i++)
    for (int j = i + 1; j <= n; j++) f[i][j] = f[j][i] = inf;
  for (int i = 1; i <= m; i++) {
    long long x, y, z;
    scanf("%lld%lld%lld", &x, &y, &z);
    f[x][y] = f[y][x] = min(f[x][y], z);
  }
  dijkstra1(s);
  dijkstra2(t);
  for (int i = 1; i <= n; i++) {
    ++p[d1[i]][d2[i]];
    sum[d1[i]][d2[i]] += a[i];
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) {
      p[i][j] += p[i - 1][j] + p[i][j - 1] - p[i - 1][j - 1];
      sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    }
  for (int i = n; i; i--)
    for (int j = n; j; j--) {
      if (count(i, j, i, n))
        f1[0][i][j] = max(f1[1][i + 1][j], f1[0][i + 1][j]) + summ(i, j, i, n);
      else
        f1[0][i][j] = f1[0][i + 1][j];
      if (count(i, j, n, j))
        f1[1][i][j] = min(f1[1][i][j + 1], f1[0][i][j + 1]) - summ(i, j, n, j);
      else
        f1[1][i][j] = f1[1][i][j + 1];
    }
  if (f1[0][1][1] < 0)
    puts("Cry");
  else {
    if (f1[0][1][1])
      puts("Break a heart");
    else
      puts("Flowers");
  }
  return 0;
}
