#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3000015;
long long hash1[MAXN];
long long hash2[MAXN];
long long pw1[MAXN], pw2[MAXN];
int mark[MAXN];
int abc = 4;
long long mod1 = 1e9 + 7;
long long mod2 = 1e9 + 9;
long long base = 256;
string s;
long long getHash(int pos, int len, long long hash[MAXN], long long mod,
                  long long pw[MAXN]) {
  long long r = hash[pos + len - 1];
  if (pos == 0) return r;
  long long l = (hash[pos - 1] * pw[len]) % mod;
  long long h = (r - l + 100000 * mod) % mod;
  return h;
}
void fill_hash(long long hash[MAXN], long long mod, long long pw[MAXN]) {
  hash[0] = s[0];
  pw[0] = 1;
  for (int i = 1; i < s.length(); i++) {
    pw[i] = pw[i - 1] * base;
    pw[i] %= mod;
  }
  for (int i = 1; i < s.length(); i++) {
    hash[i] = hash[i - 1] * base + s[i];
    hash[i] %= mod;
  }
}
set<pair<long long, int> > stk1, stk2;
set<pair<pair<long long, long long>, int> > stk;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  string tmp;
  cin >> s;
  s += s;
  base = 256;
  mod1 = 1e9 + 7;
  mod2 = 1e9 + 9;
  fill_hash(hash1, mod1, pw1);
  fill_hash(hash2, mod2, pw2);
  int p;
  cin >> p;
  memset(mark, -1, sizeof(mark));
  for (int i = 1; i <= p; i++) {
    cin >> tmp;
    long long hh1 = 0, hh2 = 0;
    for (auto x : tmp) {
      hh1 = (hh1 * base + x) % mod1;
      hh2 = (hh2 * base + x) % mod2;
    }
    stk.insert({{hh1, hh2}, i});
    stk1.insert({hh1, i});
    stk2.insert({hh2, i});
  }
  for (int i = 0; i < s.length(); i++) {
    if (i + k > s.length()) {
      break;
    }
    long long hh1 = getHash(i, k, hash1, mod1, pw1);
    long long hh2 = getHash(i, k, hash2, mod2, pw2);
    auto it = stk.lower_bound(make_pair(make_pair(hh1, hh2), -1));
    auto jt = stk1.lower_bound(make_pair(hh1, -1));
    if (it != stk.end() && hh1 == (it->first.first) &&
        hh2 == (it->first.second)) {
      mark[i] = it->second;
    }
    if (jt != stk1.end() && hh1 == jt->first) {
    }
  }
  for (int i = 0; i < s.length(); i++) {
  }
  for (int i = 0; i < k; i++) {
    bool flag = true;
    map<int, int> use;
    vector<int> ans;
    for (int j = i; j < s.length(); j += k) {
      if (ans.size() == n) break;
      if (mark[j] == -1) {
        flag = false;
        break;
      }
      if (use[mark[j]]) {
        flag = false;
        break;
      }
      use[mark[j]] = 1;
      ans.push_back(mark[j]);
    }
    if (flag) {
      cout << "YES\n";
      for (auto x : ans) cout << x << ' ';
      return 0;
    }
  }
  cout << "NO";
  return 0;
}
