#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
const long long base = 30;
const long long one = 1;
long long n, m, k, pw[500010], maxl[500010], maxr[500010];
char s[500010], t[500010];
struct hashh {
  long long hash[500010];
} S, T;
void hs(char *sss, hashh &R) {
  long long len = strlen(sss + 1);
  for (long long i = 1; i <= len; i++)
    R.hash[i] = (R.hash[i - 1] * base + sss[i] - 'a' + one) % mod;
}
signed main() {
  cin >> n >> m >> k;
  pw[0] = 1;
  for (long long i = 1; i <= n; i++) pw[i] = pw[i - 1] * base % mod;
  cin >> s + 1 >> t + 1;
  hs(s, S);
  hs(t, T);
  long long pos = k;
  for (long long i = 1; i <= m; i++) maxl[i] = n + 1;
  for (long long i = 1; i <= min(m, k); i++) {
    while (
        pos <= n &&
        ((S.hash[(pos)] -
          S.hash[(pos - i + 1) - 1] * pw[(pos) - (pos - i + 1) + 1]) %
             mod +
         mod) % mod !=
            ((T.hash[(i)] - T.hash[(1) - 1] * pw[(i) - (1) + 1]) % mod + mod) %
                mod)
      pos++;
    if (((S.hash[(k)] - S.hash[(k - i + 1) - 1] * pw[(k) - (k - i + 1) + 1]) %
             mod +
         mod) %
            mod ==
        ((T.hash[(i)] - T.hash[(1) - 1] * pw[(i) - (1) + 1]) % mod + mod) % mod)
      pos = k;
    maxl[i] = pos;
  }
  pos = n - k + 1;
  for (long long i = 1; i <= min(m, k); i++) {
    while (pos && ((S.hash[(pos + i - 1)] -
                    S.hash[(pos)-1] * pw[(pos + i - 1) - (pos) + 1]) %
                       mod +
                   mod) % mod !=
                      ((T.hash[(m)] -
                        T.hash[(m - i + 1) - 1] * pw[(m) - (m - i + 1) + 1]) %
                           mod +
                       mod) %
                          mod)
      pos--;
    if (((S.hash[(n - k + i)] -
          S.hash[(n - k + 1) - 1] * pw[(n - k + i) - (n - k + 1) + 1]) %
             mod +
         mod) %
            mod ==
        ((T.hash[(m)] - T.hash[(m - i + 1) - 1] * pw[(m) - (m - i + 1) + 1]) %
             mod +
         mod) %
            mod)
      pos = n - k + 1;
    maxr[m - i + 1] = pos;
  }
  for (long long i = 1; i <= n - m + 1; i++) {
    if (((S.hash[(i + m - 1)] - S.hash[(i)-1] * pw[(i + m - 1) - (i) + 1]) %
             mod +
         mod) %
            mod ==
        ((T.hash[(m)] - T.hash[(1) - 1] * pw[(m) - (1) + 1]) % mod + mod) %
            mod) {
      if (k >= i && n - k + 1 <= i + m - 1) continue;
      printf("Yes\n%lld %lld", min(max(one, i - k + 1), n - k + 1 - k),
             max(k + 1, min(n - k + 1, i)));
      return 0;
    }
  }
  for (long long i = 1; i < m; i++) {
    if (maxl[i] < maxr[i + 1] && maxl[i] <= n && maxr[i + 1]) {
      printf("Yes\n%lld %lld", maxl[i] - k + 1, maxr[i + 1]);
      return 0;
    }
  }
  printf("No");
  return 0;
}
