#include <bits/stdc++.h>
using namespace std;
const int MX = 2000005;
const long long p1 = 29;
const long long p2 = 31;
const long long mod1 = 1e9 + 7;
const long long mod2 = 1e9 + 9;
int n, k, len, q;
vector<long long> pow1(MX), pow2(MX);
vector<pair<long long, long long> > pre;
string t;
map<pair<long long, long long>, int> mp;
void power_calc() {
  pow1[0] = pow2[0] = 1LL;
  for (int i = 1; i < MX; i++) {
    pow1[i] = (pow1[i - 1] * p1) % mod1;
    pow2[i] = (pow2[i - 1] * p2) % mod2;
  }
}
pair<long long, long long> hash_value(const string &s) {
  long long val1 = 0, val2 = 0;
  for (int i = 0; i < s.length(); i++) {
    val1 = (val1 + (s[i] - 'a' + 1) * pow1[i]) % mod1;
    val2 = (val2 + (s[i] - 'a' + 1) * pow2[i]) % mod2;
  }
  val1 = (val1 * pow1[len]) % mod1;
  val2 = (val2 * pow2[len]) % mod2;
  return pair<long long, long long>(val1, val2);
}
vector<pair<long long, long long> > prefix_hash(const string &s) {
  vector<pair<long long, long long> > pre(s.length());
  pre[0].first = pre[0].second = s[0] - 'a' + 1;
  for (int i = 1; i < s.length(); i++) {
    pre[i].first = (pre[i - 1].first + (s[i] - 'a' + 1) * pow1[i]) % mod1;
    pre[i].second = (pre[i - 1].second + (s[i] - 'a' + 1) * pow2[i]) % mod2;
  }
  return pre;
}
inline pair<long long, long long> range_hash(const int l, const int r) {
  return ((!l) ? pre[r]
               : pair<long long, long long>(
                     (pre[r].first - pre[l - 1].first + mod1) % mod1,
                     (pre[r].second - pre[l - 1].second + mod2) % mod2));
}
inline pair<long long, long long> shift(const pair<long long, long long> &val,
                                        const int add) {
  return pair<long long, long long>((val.first * pow1[add]) % mod1,
                                    (val.second * pow2[add]) % mod2);
}
bool check(const int idx) {
  vector<bool> mark(q + 1, 0);
  map<pair<long long, long long>, int>::iterator it;
  for (int i = idx, cnt = 0; cnt < n; i += k, cnt++) {
    it = mp.find(shift(range_hash(i, i + k - 1), len - i));
    if (it == mp.end() || mark[it->second]) return false;
    mark[it->second] = 1;
  }
  return true;
}
void print(const int idx) {
  map<pair<long long, long long>, int>::iterator it;
  for (int i = idx, cnt = 0; cnt < n; i += k, cnt++) {
    it = mp.find(shift(range_hash(i, i + k - 1), len - i));
    cout << it->second << ' ';
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  power_calc();
  cin >> n >> k;
  len = n * k;
  cin >> t;
  t += t;
  pre = prefix_hash(t);
  cin >> q;
  string s;
  for (int i = 1; i <= q; i++) {
    cin >> s;
    mp[hash_value(s)] = i;
  }
  int idx = -1;
  for (int i = 0; i < len; i++) {
    if (mp.count(shift(range_hash(i, i + k - 1), len - i))) {
      idx = i;
      break;
    }
  }
  if (idx == -1) {
    cout << "NO" << endl;
    return 0;
  }
  for (int i = idx; i < idx + k; i++) {
    if (check(i)) {
      cout << "YES\n";
      print(i);
      return 0;
    }
  }
  cout << "NO" << endl;
  return 0;
}
