#include <bits/stdc++.h>
using namespace std;
int n, k;
string s;
string t;
string ans;
bool check(int pos) {
  if (pos - (int)(s.size() - 1) < 0) return true;
  if (t[pos - (s.size() - 1)] == '1') {
    return true;
  } else {
    for (size_t i = 0; i < s.size(); i++) {
      if (ans[pos - (s.size() - 1) + i] != s[i]) {
        return true;
      }
    }
    return false;
  }
}
bool dfs(int pos) {
  if (pos == (int)ans.size()) {
    return true;
  }
  if (ans[pos] != ' ') {
    if (check(pos)) {
      return dfs(pos + 1);
    }
  } else {
    for (int i = 0; i < k; i++) {
      ans[pos] = 'a' + i;
      if (check(pos)) {
        if (dfs(pos + 1)) {
          return true;
        }
      }
      ans[pos] = ' ';
    }
  }
  return false;
}
int main() {
  cin >> n >> k;
  cin >> s;
  cin >> t;
  ans.resize(n);
  for (int i = 0; i < n; i++) {
    ans[i] = ' ';
  }
  for (size_t i = 0; i < t.size(); i++) {
    if (t[i] == '1') {
      for (size_t j = 0; j < s.size(); j++) {
        ans[i + j] = s[j];
      }
    }
  }
  for (size_t i = 0; i < t.size(); i++) {
    if (t[i] == '1') {
      for (size_t j = 0; j < s.size(); j++) {
        if (ans[i + j] != s[j]) {
          cout << "No solution" << endl;
          return 0;
        }
      }
    }
  }
  if (dfs(0)) {
    cout << ans << endl;
  } else {
    cout << "No solution" << endl;
  }
  return 0;
}
