Problem:
﻿Score: 100 points

Problem Statement

In AtCoder city, there are five antennas standing in a straight line. They are called Antenna A, B, C, D and E from west to east, and their coordinates are a, b, c, d and e, respectively.

Two antennas can communicate directly if the distance between them is k or less, and they cannot if the distance is greater than k.

Determine if there exists a pair of antennas that cannot communicate directly.

Here, assume that the distance between two antennas at coordinates p and q (p < q) is q - p.

Constraints

a, b, c, d, e and k are integers between 0 and 123 (inclusive).

a < b < c < d < e

Input

Input is given from Standard Input in the following format:

a
b
c
d
e
k

Output

Print :( if there exists a pair of antennas that cannot communicate directly, and print Yay! if there is no such pair.

Sample Input 1

1
2
4
8
9
15

Sample Output 1

Yay!

In this case, there is no pair of antennas that cannot communicate directly, because:

the distance between A and B is 2 - 1 = 1

the distance between A and C is 4 - 1 = 3

the distance between A and D is 8 - 1 = 7

the distance between A and E is 9 - 1 = 8

the distance between B and C is 4 - 2 = 2

the distance between B and D is 8 - 2 = 6

the distance between B and E is 9 - 2 = 7

the distance between C and D is 8 - 4 = 4

the distance between C and E is 9 - 4 = 5

the distance between D and E is 9 - 8 = 1

and none of them is greater than 15. Thus, the correct output is Yay!.

Sample Input 2

15
18
26
35
36
18

Sample Output 2

:(

In this case, the distance between antennas A and D is 35 - 15 = 20 and exceeds 18, so they cannot communicate directly.
Thus, the correct output is :(.

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::str::FromStr;
use std::io::Read;
use std::ops::Sub;
use std::convert::From;

pub trait AsZeroOrigin {
    fn as_zero_origin(self) -> Self;
}

pub trait AsZeroOriginWithMatrix {
    fn as_zero_origin(self) -> Self;
}

impl<T> AsZeroOrigin for Vec<T>
where
    T: Sub<T, Output = T> + From<u8>,
{
    fn as_zero_origin(self) -> Self {
        self.into_iter().map(|i| i - T::from(1)).collect()
    }
}

impl<T> AsZeroOriginWithMatrix for Vec<Vec<T>>
where
    T: Sub<T, Output = T> + From<u8>,
{
    fn as_zero_origin(self) -> Self {
        self.into_iter()
            .map(|v| v.into_iter().map(|i| i - T::from(1)).collect())
            .collect()
    }
}

pub trait Convert<T>
where
    T: FromStr,
{
    fn read_one(&mut self) -> T;
    fn to_vec(&mut self, n: usize) -> Vec<T>;
    fn to_matrix(&mut self, n: usize, m: usize) -> Vec<Vec<T>>;

    fn to_tuples<U>(&mut self, n: usize) -> Vec<(T, U)>
    where
        U: FromStr;
}

impl<'a, T> Convert<T> for ::std::str::SplitWhitespace<'a>
where
    T: FromStr,
{
    fn read_one(&mut self) -> T {
        let word = self.next().unwrap();
        word.parse().ok().unwrap()
    }

    fn to_vec(&mut self, n: usize) -> Vec<T> {
        (0..n)
            .map(|_| self.next().unwrap().parse().ok().unwrap())
            .collect::<Vec<_>>()
    }

    fn to_matrix(&mut self, n: usize, m: usize) -> Vec<Vec<T>> {
        (0..n).map(|_| self.to_vec(m)).collect::<Vec<_>>()
    }

    fn to_tuples<U>(&mut self, n: usize) -> Vec<(T, U)>
    where
        U: FromStr,
    {
        (0..n)
            .map(|_| {
                let a = self.next().unwrap().parse().ok().unwrap();
                let b = self.next().unwrap().parse().ok().unwrap();
                (a, b)
            })
            .collect::<Vec<_>>()
    }
}

pub fn read_stdin() -> String {
    let mut s = String::new();
    ::std::io::stdin().read_to_string(&mut s).unwrap();
    s
}

fn main() {
    let source = read_stdin();
    let mut iter = source.split_whitespace();
    let v: Vec<u64> = iter.to_vec(5);
    let k: u64 = iter.read_one();

    let mut ds = Vec::new(); 
    for i in 0..4 {
        for j in (i + 1)..5 {
            ds.push(v[j] - v[i]);
        }
    }

    println!("{}", if ds.into_iter().all(|d| d <= k) { "Yay!" } else { ":(" });
}