#include <bits/stdc++.h>
using namespace std;
const int N = 500005;
const long long MOD = 1e9 + 7;
int n, m, k, z[2 * N], match[2][N + 1];
char tmp[N];
string s, t;
int main() {
  scanf("%d%d%d", &n, &m, &k);
  scanf("%s", tmp);
  s = string(tmp);
  scanf("%s", tmp);
  t = string(tmp);
  memset(match, -1, sizeof match);
  for (int c = 0; c < 2; c++) {
    string str = t + "#" + s;
    memset(z, 0, sizeof z);
    vector<vector<int> > mx(m + 1);
    set<int> a;
    for (int i = 1, L = 0, R = 1; i < str.size(); i++) {
      if (i < R) z[i] = min(z[i - L], R - i);
      while (i + z[i] < str.size() && str[i + z[i]] == str[z[i]]) z[i]++;
      if (i + z[i] > R) L = i, R = i + z[i];
    }
    for (int i = 0; i < n; i++) {
      mx[z[i + (m + 1)]].push_back(i);
      if (z[i + (m + 1)] >= m) {
        int x = min(i, n - 2 * k), y = x + k;
        if (y >= n) continue;
        puts("Yes");
        printf("%d %d\n", x + 1, y + 1);
        return 0;
      }
    }
    for (int i = m; i > 0; i--) {
      for (int j = 0; j < mx[i].size(); j++) a.insert(mx[i][j]);
      if (auto it = a.lower_bound(k - i); it != a.end()) match[c][i] = *it;
    }
    reverse(s.begin(), s.end());
    reverse(t.begin(), t.end());
  }
  for (int i = 1; i < m; i++) {
    if (i <= k && m - i <= k && match[0][i] != -1 && match[1][m - i] != -1) {
      int x = match[0][i] + i - 1, y = match[1][m - i] + (m - i) - 1;
      if (x + y >= n - 1) continue;
      puts("Yes");
      printf("%d %d\n", x - (k - 1) + 1, n - 1 - y + 1);
      return 0;
    }
  }
  puts("No");
  return 0;
}
