#include <bits/stdc++.h>
#pragma GCC optimize "trapv"
long long int power(long long int x, long long int b) {
  long long int p = 1;
  while (b > 0) {
    if (b & 1) {
      p = p * x;
      p %= 998244353;
    }
    b >>= 1;
    x *= x;
    x %= 998244353;
  }
  return p % 998244353;
}
using namespace std;
struct ppp {
  char a;
  long long int b, c, d;
};
long long int N;
struct lex_compare {
  bool operator()(ppp p1, ppp p2) {
    if (p1.a == p2.a) {
      if (p1.b == p2.b)
        return p1.c < p2.c;
      else
        return p1.b < p2.b;
    } else {
      return p1.a < p2.a;
    }
  }
};
long long int n, m, k;
bool comp(pair<long long int, long long int> p1,
          pair<long long int, long long int> p2) {
  if (p1.first == p2.first)
    return p1.second < p2.second;
  else
    return p1.first < p2.first;
}
int main() {
  long long int n, j;
  cin >> n >> j;
  pair<long long int, long long int> p1;
  cin >> p1.first >> p1.second;
  pair<long long int, long long int> arr[n];
  for (long long int i = 0; i < n; i++) cin >> arr[i].first >> arr[i].second;
  long long int i = 0;
  long long int x = p1.first, y = p1.second;
  map<pair<long long int, pair<long long int, long long int> >,
      pair<long long int, long long int> >
      m;
  while (i < j) {
    long long int t = i % n;
    long long int xnew = 2 * arr[t].first - x;
    long long int ynew = 2 * arr[t].second - y;
    if (m.count({t, {x, y}})) {
      break;
    }
    m[{t, {x, y}}] = {xnew, ynew};
    x = xnew;
    y = ynew;
    i++;
  }
  if (i == j) {
    cout << x << " " << y << "\n";
    return 0;
  } else {
    j = j % m.size();
    i = 0;
    while (i < j) {
      long long int t = i % n;
      long long int xnew = 2 * arr[t].first - x;
      long long int ynew = 2 * arr[t].second - y;
      x = xnew;
      y = ynew;
      i++;
    }
    cout << x << " " << y << "\n";
  }
  return 0;
}
