#include <bits/stdc++.h>
using namespace std;
string itoa(int i) {
  stringstream ss;
  ss << i;
  return ss.str();
}
typedef struct _point {
  int x;
  int y;
  int exist;
  _point() {
    x = 0;
    y = 0;
    exist = 0;
  }
  _point(int _x, int _y) {
    x = _x;
    y = _y;
    exist = 0;
  }
  _point(int _x, int _y, int _exist) {
    x = _x;
    y = _y;
    exist = _exist;
  }
  bool operator<(const _point& right) const {
    if (x < right.x)
      return true;
    else if (x > right.x)
      return false;
    return y < right.y;
  }
  void operator=(const _point& right) {
    x = right.x;
    y = right.y;
    exist = right.exist;
  }
  _point operator+(const _point& right) const {
    return _point(x + right.x, y + right.y);
  }
  _point operator-(const _point& right) const {
    return _point(x - right.x, y - right.y);
  }
  _point operator/(const int& m) const { return _point(x / m, y / m); }
  int operator*(const _point& right) const { return x * right.x + y * right.y; }
  _point operator*(const int right) const {
    return _point(x * right, y * right);
  }
  int operator^(const _point& right) const { return x * right.y - y * right.x; }
  double distanceTo(const _point& right) const {
    return sqrt(pow(x - right.x, 2.0) + pow(y - right.y, 2.0));
  }
  friend ostream& operator<<(ostream& outs, const _point& right) {
    outs << "(" << right.x << "," << right.y << ")";
    return outs;
  }
} Point;
int main() {
  int n = 0, N, x, y;
  long long j;
  vector<Point> A;
  cin >> N >> j;
  A.resize(N);
  cin >> x >> y;
  Point M(x, y);
  while (n < N) {
    cin >> x >> y;
    Point a(x, y);
    A[n] = a;
    n++;
  }
  Point MJ(0, 0);
  int t = 0;
  for (long long k = j - 1; k >= 0; k--) {
    if (((t) % 2 == 0)) {
      MJ = MJ + (A[k % N] * 2);
    } else {
      MJ = MJ - (A[k % N] * 2);
    }
    if ((k % N) == 0 && ((k / N) % 2 == 0)) break;
    t = (t + 1) % 2;
  }
  if (((j) % 2 == 0)) {
    MJ = MJ + M;
  } else {
    MJ = MJ - M;
  }
  cout << MJ.x << " " << MJ.y << endl;
  return 0;
}
