#include <bits/stdc++.h>
using namespace std;
const int N = (int)3e6 + 123;
const long long INF = (long long)1e18 + 123;
const int inf = (int)1e9 + 123;
const int MOD = (int)1e9 + 7;
struct bor {
  int _next[27], suff, id, len;
  bor() {
    memset(_next, -1, sizeof _next);
    suff = -1;
    len = 0;
  }
};
vector<bor> t;
void add(string s, int it) {
  int v = 0;
  for (int i = 0; i < (int)(s.size()); i++) {
    char c = s[i] - 'a';
    if (t[v]._next[c] == -1) {
      t[v]._next[c] = (int)(t.size());
      t.push_back(*new bor());
      t[t[v]._next[c]].len = t[v].len + 1;
    }
    v = t[v]._next[c];
  }
  t[v].id = it;
}
queue<int> q;
bool u[N];
void build() {
  q.push(0);
  u[0] = 1;
  while ((int)(q.size()) > 0) {
    int x = q.front();
    q.pop();
    for (int c = 0; c < 26; c++) {
      int to = t[x]._next[c];
      if (to == -1 || u[to]) continue;
      int _suff = t[x].suff;
      while (_suff >= 0 && t[_suff]._next[c] == -1) _suff = t[_suff].suff;
      t[to].suff = (_suff == -1) ? 0 : t[_suff]._next[c];
      for (int ch = 0; ch < 26; ch++)
        if (t[to]._next[ch] == -1 && t[t[to].suff]._next[ch] != -1)
          t[to]._next[ch] = t[t[to].suff]._next[ch];
      q.push(to);
      u[to] = 1;
    }
  }
}
int idx[N];
int n, k, m;
void solve(string s) {
  int v = 0;
  for (int i = 0; i < (int)(s.size()); i++) {
    int c = s[i] - 'a';
    if (t[v]._next[c] == -1)
      v = 0;
    else
      v = t[v]._next[c];
    if (t[v].len == k) idx[i] = t[v].id;
  }
}
string s, b;
set<int> st;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  t.push_back(*new bor());
  unsigned int FOR;
  asm("rdtsc" : "=A"(FOR));
  srand(FOR);
  cin >> n >> k >> s;
  s += s;
  for (int i = 0; i < (int)(s.size()); i++) idx[i] = -1;
  cin >> m;
  for (int i = 1; i <= m; i++) {
    cin >> b;
    add(b, i);
  }
  build();
  solve(s);
  bool ok = 0;
  for (int i = n * k; i < k * (n + 1); i++) {
    if (idx[i] == -1) {
      continue;
    }
    st.clear();
    ok = 1;
    st.insert(idx[i]);
    for (int j = i + k; j < (int)(s.size()); j += k) {
      if (idx[j % (n * k)] == -1 || st.count(idx[j % (n * k)])) {
        ok = 0;
        break;
      }
      st.insert(idx[j % (n * k)]);
    }
    if (ok && (int)(st.size()) != n) ok = 0;
    if (ok) {
      cout << "YES\n";
      if (i == k * (n + 1) - 1) cout << idx[i] << " ";
      for (int j = i + k; j < (int)(s.size()); j += k) {
        cout << idx[j % (n * k)] << " ";
      }
      if (i != k * (n + 1) - 1) cout << idx[i] << " ";
      return 0;
    }
  }
  cout << "NO";
  return 0;
}
