#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 5;
int n, k, q, f[N];
vector<int> vec[N];
string s;
struct trie {
  int end, link;
  int to[26];
  trie() {
    end = 0;
    link = 0;
    fill(to, to + 26, -1);
  }
};
vector<trie> t;
void add(string s, int id) {
  if (!t.size()) t.push_back(trie());
  int v = 0;
  for (int i = 0; i < s.size(); i++) {
    if (t[v].to[s[i] - 'a'] == -1) {
      t[v].to[s[i] - 'a'] = t.size();
      t.push_back(trie());
    }
    v = t[v].to[s[i] - 'a'];
  }
  t[v].end = id;
}
void build() {
  queue<int> q;
  q.push(0);
  t[0].link = -1;
  while (!q.empty()) {
    int v = q.front();
    q.pop();
    for (int i = 0; i < 26; i++) {
      int to = t[v].to[i];
      if (to == -1) continue;
      int j = t[v].link;
      while (j != -1 && t[j].to[i] == -1) {
        j = t[j].link;
      }
      if (j != -1) {
        t[to].link = t[j].to[i];
      }
      q.push(to);
    }
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  cin >> s;
  s += s;
  cin >> q;
  for (int i = 1; i <= q; i++) {
    string x;
    cin >> x;
    add(x, i);
  }
  build();
  string ss = "";
  int v = 0;
  for (int i = 0; i < s.size(); i++) {
    ss += s[i];
    int cur = v;
    while (cur > 0 && t[cur].to[s[i] - 'a'] == -1) {
      cur = t[cur].link;
    }
    if (t[cur].to[s[i] - 'a'] != -1) {
      v = t[cur].to[s[i] - 'a'];
      if (t[v].end != 0) {
        f[i] = t[v].end;
      }
    } else {
      v = 0;
    }
  }
  for (int i = 0; i < s.size(); i++) {
    vec[i % k].push_back(f[i]);
  }
  set<int> st;
  for (int i = 0; i < k; i++) {
    st.clear();
    bool u = 0;
    for (int j = n; j < vec[i].size(); j++) {
      if (!st.count(vec[i][j]) && vec[i][j] != 0) {
        st.insert(vec[i][j]);
      } else {
        u = 1;
        break;
      }
    }
    if (!u) {
      cout << "YES\n";
      for (int j = n; j < vec[i].size(); j++) {
        cout << vec[i][j] << " ";
      }
      return 0;
    }
  }
  cout << "NO";
}
