#include <iostream>
#include <valarray>
#include <queue>
#include <cstring>
#include <stack>
using namespace std;
bool getBigger(int a, string &cards) { // 找出第一张比a大的牌
for (unsigned int i = 0; i < cards.size(); ++i) {
if (a < cards[i] - '0') {
cards[i] = 0;
return true;
}
}
return false;
}
bool getBiggerNew(int a, int &get, string &cards) { // 找出第一张比a大1的牌
for (unsigned int i = 0; i < cards.size(); ++i) {
if (a < cards[i] - '0') {
get = cards[i] - '0';
cards[i] = 0;
return true;
}
}
return false;
}
void getEachNum(int fre[], string cards) { // 计算每种牌出现的频率
for (unsigned int i = 0; i < cards.size(); ++i) {
fre[cards[i] - '0']++;
}
// for (int i = 0; i < 10; ++i) {
// printf("fre[%d]=%d\n",i,fre[i]);
// }
}
bool get_win(string card, string against) {
int len = against.size();
int fre[10]; //每种牌出现的频率
for (int i = 0; i < 10; ++i) {
fre[i] = 0;
}
getEachNum(fre, card);
if (len == 1) {
int now = against[0] - '0';
if (getBigger(now, card)) {
return true;
}
return false;
} else if (len >= 2 && len <= 4) {
for (int i = against[0] - '0'; i < 9; ++i) {
if (fre[i + 1] >= len) { // 找到一个牌号可以
// now = i + 1;
return true;
}
}
return false;
} else {
int now = against[0] - '0';
int get, last;
if (!getBiggerNew(now, last, card)) {
return false;
}
for (int i = 1; i < 5; ++i) {
now = against[i] - '0';
if (getBiggerNew(last, get, card)) {
if (get == last + 1) {
last = get;
continue;
}
return false;
}
return true;
}
}
return true;
}
int main() {
string cards, against;
cin >> cards >> against;
if (get_win(cards, against)) {
cout << "YES";
} else {
cout << "NO";
}
}