#include <bits/stdc++.h>
using namespace std;
template <typename T>
void nexts(T *, int);
template <typename T>
void dump(T *arr, int cnt, char sep = ' ');
void __init__(bool, bool);
const int MAXMAXMAX = 1000 * 1000 * 1000;
string a, b, c;
char ans[100015];
vector<int> cnt_a(26);
vector<int> cnt_b(26);
vector<int> cnt_c(26);
int main() {
  __init__(1, 0);
  cin >> a >> b >> c;
  for (int(i) = (0); (i) < (a.size()); ++(i)) ++cnt_a[a[i] - 'a'];
  for (int(i) = (0); (i) < (b.size()); ++(i)) ++cnt_b[b[i] - 'a'];
  for (int(i) = (0); (i) < (c.size()); ++(i)) ++cnt_c[c[i] - 'a'];
  int b_max = MAXMAXMAX;
  for (int(i) = (0); (i) < (26); ++(i))
    if (cnt_b[i] != 0) b_max = min(b_max, cnt_a[i] / cnt_b[i]);
  int max_ans = 0;
  int max_b = 0;
  int max_c = 0;
  if (b_max == MAXMAXMAX) b_max = 0;
  vector<int> tmp = cnt_a;
  for (int(i) = (0); (i) < (b_max + 1); ++(i)) {
    if (i != 0)
      for (int(i) = (0); (i) < (26); ++(i)) tmp[i] -= cnt_b[i];
    int c_max = MAXMAXMAX;
    for (int(i) = (0); (i) < (26); ++(i))
      if (cnt_c[i] != 0) c_max = min(c_max, tmp[i] / cnt_c[i]);
    if (c_max == MAXMAXMAX) b_max = 0;
    if (i + c_max > max_ans) {
      max_ans = i + c_max;
      max_b = i;
      max_c = c_max;
    }
  }
  for (int(i) = (0); (i) < (max_b); ++(i)) cout << b;
  for (int(i) = (0); (i) < (max_c); ++(i)) cout << c;
  for (int(i) = (0); (i) < (26); ++(i)) {
    cnt_a[i] -= max_b * cnt_b[i] + max_c * cnt_c[i];
    for (int(j) = (0); (j) < (cnt_a[i]); ++(j)) cout << (char)('a' + i);
  }
  cout << '\n';
  return 0;
}
template <typename T>
void nexts(T *arr, int cnt) {
  for (int i = 0; i < cnt; ++i) cin >> arr[i];
}
template <typename T>
void dump(T *arr, int cnt, char sep) {
  for (int i = 0; i < cnt; ++i) cout << arr[i] << sep;
}
void __init__(bool fastIOstream, bool acmp) {
  if (fastIOstream) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
  }
  if (acmp) {
    freopen("INPUT.TXT", "rt", stdin);
    freopen("OUTPUT.TXT", "wt", stdout);
  }
}
