#include <bits/stdc++.h>
#pragma GCC target("pclmul")
using ul = std::uint32_t;
using ull = std::uint64_t;
using li = std::int32_t;
using ll = std::int64_t;
using uss = std::uint8_t;
ul n, m, k;
const ul maxn = 5e5;
const ul maxm = 5e5;
char s[maxn + 2];
char t[maxm + 2];
char sr[maxn + 2];
char tr[maxm + 2];
ul kmp[maxm + 1];
ul kmpr[maxm + 1];
ul mn[maxm + 1];
ul mnr[maxm + 1];
void getkmp(ul kmp[], const char str[], ul len) {
  kmp[1] = 0;
  for (ul i = 2, j; i <= len; ++i) {
    for (j = kmp[i - 1]; j && str[j + 1] != str[i]; j = kmp[j])
      ;
    if (str[j + 1] == str[i]) {
      kmp[i] = j + 1;
    } else {
      kmp[i] = 0;
    }
  }
}
ul deal(const ul kmp[], const char s[], const char t[], ul mn[]) {
  for (ul i = 1; i <= m; ++i) {
    mn[i] = n - k + 1;
  }
  ul curr = 0;
  ul ret = n - k + 1;
  for (ul i = 1; i + k <= n; ++i) {
    while (curr && (t[curr + 1] != s[i] || curr == std::min(m, k))) {
      curr = kmp[curr];
    }
    if (t[curr + 1] == s[i]) {
      ++curr;
    }
    if (i >= k) {
      mn[curr] = std::min(mn[curr], i);
    }
    if (curr == m) {
      ret = std::min(ret, std::max(k, i));
    }
  }
  for (ul i = std::min(m, k); i >= 1; --i) {
    mn[kmp[i]] = std::min(mn[kmp[i]], mn[i]);
  }
  return ret;
}
int main() {
  std::scanf("%u%u%u%s%s", &n, &m, &k, s + 1, t + 1);
  std::memcpy(sr + 1, s + 1, n);
  std::reverse(sr + 1, sr + n + 1);
  std::memcpy(tr + 1, t + 1, m);
  std::reverse(tr + 1, tr + m + 1);
  getkmp(kmp, t, std::min(m, k));
  getkmp(kmpr, tr, std::min(m, k));
  ul a = deal(kmp, s, t, mn);
  ul b = deal(kmpr, sr, tr, mnr);
  if (a <= n - k) {
    std::printf("Yes\n%u %u\n", a - k + 1, n - k + 1);
    return 0;
  }
  if (b <= n - k) {
    std::printf("Yes\n%u %u\n", 1, n - b + 1);
    return 0;
  }
  for (ul i = 1; i + 1 <= m; ++i) {
    if (mn[i] + mnr[m - i] <= n) {
      std::printf("Yes\n%u %u\n", mn[i] - k + 1, n - mnr[m - i] + 1);
      return 0;
    }
  }
  std::printf("No\n");
  return 0;
}
