#include <bits/stdc++.h>
const char nl = '\n';
using namespace std;
using ll = long long;
using ld = long double;
const int N = 2e6 + 10;
const ll B = 257, P = (ll)1e16 + 61;
ll mul(ll a, ll b) {
  ll ans = 0;
  for (; b; b /= 2, a = (a + a) % P) {
    if (b % 2) ans = (ans + a) % P;
  }
  return ans;
}
ll pw[N];
void pre() {
  pw[0] = 1;
  for (int i = 1; i < N; i++) {
    pw[i] = pw[i - 1] * B % P;
  }
}
int n, k;
string s;
ll ha[N];
unordered_map<ll, int> names;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  pre();
  cin >> n >> k;
  cin >> s;
  s += s;
  for (int i = 1; i <= 2 * n * k; i++) {
    ha[i] = (ha[i - 1] * B + s[i - 1]) % P;
  }
  int g;
  cin >> g;
  for (int i = 1; i <= g; i++) {
    string t;
    cin >> t;
    ll h = 0;
    for (char c : t) h = (h * B + c) % P;
    names[h] = i;
  }
  for (int i = 0; i < k; i++) {
    bool bad = 0;
    unordered_set<ll> used;
    vector<int> sol;
    for (int j = i; j < n * k; j += k) {
      ll sh = ha[j + k] - mul(ha[j], pw[k]);
      if (sh < 0) sh += P;
      if (!names.count(sh) || used.count(sh)) {
        bad = 1;
        break;
      }
      used.insert(sh);
      sol.push_back(names[sh]);
    }
    if (!bad) {
      cout << "YES\n";
      for (int i : sol) cout << i << " ";
      cout << nl;
      return 0;
    }
  }
  puts("NO");
}
