#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  Point() {}
  Point(long long x, long long y) : x(x), y(y) {}
  Point operator-(const Point &o) const { return {x - o.x, y - o.y}; }
  bool operator<(const Point &o) const { return tie(x, y) < tie(o.x, o.y); }
  bool operator==(const Point &o) const { return tie(x, y) == tie(o.x, o.y); }
};
int N, M;
struct str {
  long long a, b, ccw;
  bool operator==(const str &o) const {
    return tie(a, b, ccw) == tie(o.a, o.b, o.ccw);
  }
  bool operator!=(const str &o) const {
    return tie(a, b, ccw) != tie(o.a, o.b, o.ccw);
  }
};
long long x, y;
vector<Point> inp[2], H[2];
long long cross(Point o, Point a, Point b) {
  a = a - o, b = b - o;
  long long ret = a.x * b.y - a.y * b.x;
  return ret;
}
void convexhull(vector<Point> &inp, vector<Point> &H) {
  int n = inp.size(), k = 0;
  H.resize(2 * n);
  for (int i = 0; i < n; i++) {
    while (k >= 2 && cross(H[k - 2], H[k - 1], inp[i]) <= 0) k--;
    H[k++] = inp[i];
  }
  for (int i = n - 1, t = k + 1; i >= 0; i--) {
    while (k >= t && cross(H[k - 2], H[k - 1], inp[i]) <= 0) k--;
    H[k++] = inp[i];
  }
  H.erase(H.begin() + k - 1, H.end());
}
int fail[100005];
vector<str> ptr, match;
void f() {
  int i, j;
  int n = ptr.size();
  fail[0] = -1;
  for (i = 1; i < n; i++) {
    j = fail[i - 1] + 1;
    while (ptr[i] != ptr[j] && j > 0) j = fail[j - 1] + 1;
    if (ptr[i] == ptr[j])
      fail[i] = j;
    else
      fail[i] = -1;
  }
}
int comp() {
  int i, j;
  for (i = j = 0; i < M; i++, j++) {
    if (j == N) return i - j;
    while (match[i] != ptr[j] && j > 0) j = fail[j - 1] + 1;
    if (match[i] != ptr[j]) j = -1;
  }
  return -1;
}
long long dist(Point a, Point b) {
  b = b - a;
  return b.x * b.x + b.y * b.y;
}
int main() {
  scanf("%d %d", &N, &M);
  for (int i = 0; i < N; i++) {
    scanf("%lld %lld", &x, &y);
    inp[0].emplace_back(x, y);
  }
  for (int i = 0; i < M; i++) {
    scanf("%lld %lld", &x, &y);
    inp[1].emplace_back(x, y);
  }
  sort(inp[0].begin(), inp[0].end());
  sort(inp[1].begin(), inp[1].end());
  convexhull(inp[0], H[0]);
  convexhull(inp[1], H[1]);
  if (H[0].size() != H[1].size()) return !printf("NO");
  H[0].push_back(H[0][0]);
  H[0].push_back(H[0][1]);
  H[1].push_back(H[1][0]);
  H[1].push_back(H[1][1]);
  for (int i = 0; i < H[0].size() - 2; i++) {
    ptr.push_back({dist(H[0][i], H[0][i + 1]), dist(H[0][i], H[0][i + 2]),
                   cross(H[0][i], H[0][i + 1], H[0][i + 2])});
  }
  for (int i = 0; i < H[1].size() - 2; i++) {
    match.push_back({dist(H[1][i], H[1][i + 1]), dist(H[1][i], H[1][i + 2]),
                     cross(H[1][i], H[1][i + 1], H[1][i + 2])});
  }
  M = match.size();
  for (int i = 0; i < M; i++) match.push_back(match[i]);
  M *= 2;
  N = ptr.size();
  f();
  printf("%s", comp() != -1 ? "YES" : "NO");
}
