#include <bits/stdc++.h>
using namespace std;
long long int inf = 1e18;
long long int p = 1e9 + 7;
long double eps = 1e-9;
long long int power(long long int x, long long int y, long long int p) {
  long long int res = 1;
  x = x % p;
  while (y > 0) {
    if (y & 1) res = (res * x) % p;
    y = y >> 1;
    x = (x * x) % p;
  }
  return res;
}
long long int pwr(long long int x, long long int y) {
  long long int res = 1;
  x = x;
  while (y > 0) {
    if (y & 1) res = (res * x);
    y = y >> 1;
    x = (x * x);
  }
  return res;
}
long long int modInverse(long long int n, long long int p) {
  return power(n, p - 2, p);
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  long long int i, y, x, z, g, key, h, n, m, a, b, c, j, k, d;
  long long int t2, t3, t4, t1, t5, t6;
  string s, s2, s1;
  long long int l, r;
  long long int tc;
  tc = 1;
  long long int x1, y1, x2, y2;
  while (tc--) {
    cin >> n >> k;
    long long int m1 = 1e9 + 7, m2 = 1e9 + 9, p1 = 31, p2 = 29;
    long long int N = 2 * 1e6 + 5;
    map<pair<long long int, long long int>, long long int> ma;
    vector<long long int> p_pow1(N, 1), p_inv1(N, 1), p_pow2(N, 1),
        p_inv2(N, 1);
    for (i = 1; i < N; i++) {
      p_pow1[i] = (p_pow1[i - 1] * p1) % m1;
      p_inv1[i] = (modInverse(p_pow1[i], m1));
      p_pow2[i] = (p_pow2[i - 1] * p2) % m2;
      p_inv2[i] = (modInverse(p_pow2[i], m2));
    }
    cin >> s;
    vector<pair<long long int, long long int>> pre(s.length() + k + 1,
                                                   make_pair(0, 0));
    for (i = 0; i < s.length() + k; i++) {
      char temp = s[i % s.length()];
      pre[i + 1].first = (pre[i].first + (temp - 'a' + 1) * p_pow1[i]) % m1;
      pre[i + 1].second = (pre[i].second + (temp - 'a' + 1) * p_pow2[i]) % m2;
    }
    vector<set<pair<long long int, long long int>>> vec(k);
    for (i = 0; i < s.length(); i++) {
      pair<long long int, long long int> temp;
      temp.first = ((pre[i + k].first - pre[i].first + m1) * p_inv1[i]) % m1;
      temp.second = ((pre[i + k].second - pre[i].second + m2) * p_inv2[i]) % m2;
      vec[i % k].insert(temp);
    }
    cin >> x;
    set<pair<long long int, long long int>> hashes;
    for (i = 0; i < x; i++) {
      string str;
      cin >> str;
      pair<long long int, long long int> hs = make_pair(0, 0);
      for (j = 0; j < str.length(); j++) {
        hs.first = (hs.first + (str[j] - 'a' + 1) * p_pow1[j]) % m1;
        hs.second = (hs.second + (str[j] - 'a' + 1) * p_pow2[j]) % m2;
      }
      ma[hs] = i + 1;
      hashes.insert(hs);
    }
    for (i = 0; i < k; i++) {
      long long int f = 1;
      if (vec[i].size() < n) continue;
      for (auto u : vec[i]) {
        if (hashes.find(u) == hashes.end()) {
          f = 0;
          break;
        }
      }
      if (f == 1) break;
    }
    if (i == k) {
      cout << "NO";
    } else {
      cout << "YES\n";
      long long int ind = i;
      for (i = ind; i < s.length(); i += k) {
        pair<long long int, long long int> temp;
        temp.first = ((pre[i + k].first - pre[i].first + m1) * p_inv1[i]) % m1;
        temp.second =
            ((pre[i + k].second - pre[i].second + m2) * p_inv2[i]) % m2;
        cout << ma[temp] << " ";
      }
    }
  }
  return 0;
}
