#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int n, m, k;
char s[N], t[N];
int f[N], l[N], r[N];
void build(string &s) {
  int j = 0;
  for (int i = 1; i < s.size(); ++i) {
    while (j && s[i] != s[j]) j = f[j - 1];
    if (s[i] == s[j]) ++j;
    f[i] = j;
  }
}
int len;
string S, T;
void validate(int a, int b) {
  return;
  assert(a >= 0 && a + k - 1 < b && b + k - 1 < S.size());
  string q = S.substr(a, k) + S.substr(b, k);
  q = T + "#" + q;
  build(q);
  bool ok = false;
  for (int i = T.size(); i < q.size(); ++i)
    if (f[i] == len) {
      ok = true;
      break;
    }
  if (!ok)
    while (1)
      ;
}
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%s%s", s, t);
  S = s;
  T = t;
  string x = T + "#" + S;
  build(x);
  memset(l, -1, sizeof(l));
  memset(r, -1, sizeof(r));
  len = T.size();
  for (int i = T.size(); i < x.size(); ++i) {
    int cur = f[i];
    if (len <= k && cur == len) {
      int e = i - T.size() - 1;
      int s = e - len + 1;
      int l = e - k + 1;
      l = max(l, 0);
      int r = l + k - 1;
      if (r < S.size() && S.size() - r - 1 >= k) {
        puts("Yes");
        validate(l, r + 1);
        printf("%d %d\n", l + 1, r + 2);
        return 0;
      }
      r = s + k - 1;
      r = min(r, (int)S.size() - 1);
      l = r - k + 1;
      if (l >= k) {
        puts("Yes");
        validate(0, l);
        printf("%d %d\n", 1, l + 1);
        return 0;
      }
    }
  }
  for (int i = T.size() + k; i < x.size(); ++i) {
    if (f[i]) {
      int cur = f[i];
      while (cur) {
        if (l[cur] != -1) break;
        l[cur] = i - T.size() - 1;
        cur = f[cur - 1];
      }
    }
  }
  reverse(S.begin(), S.end());
  reverse(T.begin(), T.end());
  x = T + "#" + S;
  build(x);
  for (int i = T.size() + k; i < x.size(); ++i) {
    if (f[i]) {
      int cur = f[i];
      while (cur) {
        if (r[cur] != -1) break;
        r[cur] = i - T.size() - 1;
        r[cur] = S.size() - r[cur] - 1;
        cur = f[cur - 1];
      }
    }
  }
  reverse(S.begin(), S.end());
  reverse(T.begin(), T.end());
  l[0] = k - 1;
  r[0] = S.size() - k;
  for (int i = 0; i <= len; ++i) {
    if (l[i] != -1) assert(l[i] >= k - 1);
    if (r[i] != -1) assert(r[i] <= S.size() - k);
  }
  for (int i = 0; i <= len; ++i) {
    if (i <= k && len - i <= k && l[i] != -1 && r[len - i] != -1 &&
        l[i] < r[len - i]) {
      puts("Yes");
      int a = l[i] - k + 1;
      int b = r[len - i];
      printf("%d %d\n", a + 1, b + 1);
      return 0;
    }
  }
  puts("No");
  return 0;
}
