#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
long long int X[2] = {37, 23}, mod[2] = {1000000007, 1000000009},
              pre[2000006][2];
int g;
vector<int> vis, res;
vector<long long int> hsh[2];
map<pair<long long int, long long int>, int> mp;
void prehsh(int id, string &s) {
  pair<long long int, long long int> hs;
  hs.first = hs.second = s[0];
  for (int i = 1; i < s.size(); i++) {
    hs.first = (hs.first * X[0] + s[i]) % mod[0];
    hs.second = (hs.second * X[1] + s[i]) % mod[1];
  }
  mp[hs] = id;
}
inline pair<long long int, long long int> compute_hash(int i, int j) {
  pair<long long int, long long int> tmp;
  tmp.first = hsh[0][j];
  tmp.second = hsh[1][j];
  if (i) {
    tmp.first -= (pre[j - i + 1][0] * hsh[0][i - 1]) % mod[0];
    tmp.second -= (pre[j - i + 1][1] * hsh[1][i - 1]) % mod[1];
  }
  tmp.first = (tmp.first + mod[0]) % mod[0];
  tmp.second = (tmp.second + mod[1]) % mod[1];
  return tmp;
}
int get(int x, int y) {
  pair<long long int, long long int> hash_val = compute_hash(x, y);
  if (mp.count(hash_val)) return mp[hash_val];
  return -1;
}
int main() {
  pre[0][0] = pre[0][1] = 1;
  cin.sync_with_stdio(false);
  int n, k;
  string a, s;
  cin >> n >> k >> s >> g;
  s += s;
  for (int i = 1; i <= s.size(); i++)
    pre[i][0] = (pre[i - 1][0] * X[0]) % mod[0],
    pre[i][1] = (pre[i - 1][1] * X[1]) % mod[1];
  hsh[0].resize(s.size() + 1);
  hsh[1].resize(s.size() + 1);
  hsh[0][0] = s[0];
  hsh[1][0] = s[0];
  for (int i = 1; i < s.size(); i++) {
    hsh[0][i] = (hsh[0][i - 1] * X[0] + s[i]) % mod[0];
    hsh[1][i] = (hsh[1][i - 1] * X[1] + s[i]) % mod[1];
  }
  auto lel = compute_hash(1, 1);
  vis.resize(g + 1);
  for (int i = 1; i <= g; i++) {
    cin >> a;
    prehsh(i, a);
  }
  for (int st = 0; st < k; st++) {
    fill(vis.begin(), vis.end(), -1);
    res.clear();
    bool flag = true;
    for (int i = st, j = 0; j < n and flag; j++, i += k) {
      int z = get(i, i + k - 1);
      if (z == -1 or vis[z] != -1)
        flag = false;
      else {
        res.push_back(z);
        vis[z] = j;
      }
    }
    if (flag) {
      cout << "YES\n";
      for (auto x : res) cout << x << " ";
      return 0;
    }
  }
  cout << "NO";
  return 0;
}
