#include <bits/stdc++.h>
using namespace std;
const int MN = 2e6 + 10;
int n, k, g, sz = 1;
string A;
int G[MN], L, R, q[MN], my[MN];
int nxt[26][MN], f[MN];
vector<int> vec;
void add(string s, int id) {
  int cur = 0;
  for (int i = 0; i < k; ++i) {
    if (!nxt[s[i] - 'a'][cur]) nxt[s[i] - 'a'][cur] = sz++;
    cur = nxt[s[i] - 'a'][cur];
  }
  my[cur] = id;
}
void Make_Aho() {
  for (int i = 0; i < 26; ++i)
    if (nxt[i][0]) q[R++] = nxt[i][0];
  while (L < R) {
    int v = q[L++];
    for (int i = 0; i < 26; ++i) {
      if (nxt[i][v]) {
        f[nxt[i][v]] = nxt[i][f[v]];
        q[R++] = nxt[i][v];
      } else
        nxt[i][v] = nxt[i][f[v]];
    }
  }
}
set<int> S;
bool go(int ind, int rt) {
  if (~G[ind]) {
    if (S.count(G[ind])) return false;
    vec.push_back(G[ind]);
    S.insert(G[ind]);
    int x = (ind + k) % n;
    if (x == rt)
      return true;
    else
      return go(x, rt);
  }
  return false;
}
int main() {
  ios_base ::sync_with_stdio(false), cout.tie(0), cin.tie(0);
  memset(G, -1, sizeof G);
  memset(my, -1, sizeof my);
  cin >> n >> k;
  n *= k;
  cin >> A;
  cin >> g;
  for (int i = 0; i < g; ++i) {
    string s;
    cin >> s;
    add(s, i);
  }
  Make_Aho();
  int cur = 0;
  for (int i = 0; i < n + n; ++i) {
    int ind = i % n;
    cur = nxt[A[ind] - 'a'][cur];
    if (~my[cur]) G[(i - k + n) % n] = my[cur];
  }
  for (int i = 0; i < k; ++i) {
    bool F = go(i, i);
    if (F) {
      cout << "YES\n";
      for (auto x : vec) cout << x + 1 << ' ';
      cout << '\n';
      return 0;
    }
    vec.clear();
    S.clear();
  }
  cout << "NO\n";
  return 0;
}
