#include <bits/stdc++.h>
using namespace std;
const int inf(1010101010);
int le_res, aa;
char naam[1000];
int le_naam;
char naam_and_res[1000];
char occ[1000];
int zvals[1000];
void z_functie(char* s, int n, int* z) {
  int a(0), b(0);
  for (int i(0); i < (n); i++) z[i] = n;
  for (int i = 1; i < n; i++) {
    int k = max(0, min(b - i, z[i - a]));
    while (i + k < n && s[i + k] == s[k]) k++;
    z[i] = k;
    if (i + k > b) a = i, b = i + k;
  }
}
bool chk(char* s) {
  for (int i(0); i < (le_res); i++) naam_and_res[le_naam + 1 + i] = s[i];
  naam_and_res[le_naam + 1 + le_res] = 0;
  z_functie(naam_and_res, le_naam + 1 + le_res, zvals);
  for (int i(0); i < (le_res - le_naam + 1); i++) {
    int zz(zvals[le_naam + 1 + i]);
    if (zz == le_naam && occ[i] == '0') return false;
    if (zz != le_naam && occ[i] == '1') return false;
  }
  return true;
}
char tpl[1000];
char ans[1000];
int main() {
  cin >> le_res >> aa;
  scanf("%s", naam), le_naam = strlen(naam);
  for (int i(0); i < (le_naam); i++) naam_and_res[i] = naam[i];
  naam_and_res[le_naam] = '$';
  scanf("%s", occ);
  for (int i(0); i < (le_res); i++) tpl[i] = '.';
  for (int i(0); i < (le_res - le_naam + 1); i++) {
    if (occ[i] == '1') {
      for (int j(i); j < (i + le_naam); j++) {
        tpl[j] = naam[j - i];
      }
    }
  }
  for (int i(0); i < (le_naam); i++) {
    char c('a' + (((naam[i] - 'a') + 1) % aa));
    for (int i(0); i < (le_res); i++) {
      if (tpl[i] == '.')
        ans[i] = c;
      else
        ans[i] = tpl[i];
    }
    if (chk(ans)) {
      ans[le_res] = 0;
      printf("%s\n", ans);
      goto done;
    }
  }
  puts("No solution");
done:;
}
