#include <bits/stdc++.h>
#define ll long long
#define all(v) v.begin(),v.end()
#define MASK(i) (1LL << (i))
#define ii pair<int,int>
#define fi first
#define se second
#define endl '\n'
#define forr(i,l,r,add) for(int i = l;i <= r; i = i + add)
#define fodd(i,l,r,sub) for(int i = l;i >= r ; i = i - sub)
template <typename T1, typename T2> bool minimize(T1 &a, T2 b) {if (a > b) {a = b; return true;} return false;}
template <typename T1, typename T2> bool maximize(T1 &a, T2 b) {if (a < b) {a = b; return true;} return false;}
using namespace std;
mt19937 rd(chrono::steady_clock::now().time_since_epoch().count());
#define rand rd
long long Rand(long long l , long long h){
assert(l <= h);
return l + 1ll * rd() % (h - l + 1) * (rd() % (h - l + 1)) % (h - l + 1);
}
//////////////////////////////////////////////////////////// end of template ////////////////////////////////////////////////////////////
const int MAX = 505;
int n , c , p;
struct node{
int x , y , r , t;
};
struct in{
int ti , x , y;
};
node save[15005];
ii st , en;
const int MOD = 60;
bool ok[60][MAX][MAX];
int dp[60][MAX][MAX];
int dx[] = {-1 , 0 , 1 , 0} , dy[] = {0 , 1 , 0 , -1};
void build(int ti){
forr(i , 1 , p , 1){
int x = save[i].x , y = save[i].y , t = (save[i].t + ti) % save[i].r;
forr(u , 0 , t , 1){
forr(v , 0 , t - u , 1){
int d1 , d2;
d1 = x + u , d2 = y + v;
if(min(d1 , d2) >= 1 && max(d1 , d2) <= n) ok[ti][d1][d2] = 1;
d1 = x + u , d2 = y - v;
if(min(d1 , d2) >= 1 && max(d1 , d2) <= n) ok[ti][d1][d2] = 1;
d1 = x - u , d2 = y + v;
if(min(d1 , d2) >= 1 && max(d1 , d2) <= n) ok[ti][d1][d2] = 1;
d1 = x - u , d2 = y - v;
if(min(d1 , d2) >= 1 && max(d1 , d2) <= n) ok[ti][d1][d2] = 1;
}
}
}
}
void INP(){
cin >> c >> n >> p;
forr(i , 1 , p , 1) cin >> save[i].x >> save[i].y >> save[i].r >> save[i].t;
cin >> st.fi >> st.se >> en.fi >> en.se;
forr(i , 0 , 59 , 1) build(i);
if(c == 1){
int res = 0;
forr(i , 0 , MOD - 1 , 1){
int sum = 0;
forr(x , 1 , n , 1) forr(y , 1 , n , 1) sum += ok[i][x][y];
maximize(res , sum);
/*cout << i << ' ' << sum << endl;
forr(x , 1 , n , 1){
forr(y , 1 , n , 1) cout << ok[i][x][y];
cout << endl;
}*/
}
cout << res;
return;
}
memset(dp , 0x3f , sizeof(dp));
dp[0][st.fi][st.se] = 0;
queue <in> qu;
qu.push({0 , st.fi , st.se});
while(!qu.empty()){
int x = qu.front().x , ti = qu.front().ti , y = qu.front().y;
//cout << ti << ' ' << x << ' ' << y << endl << dp[ti][x][y] << endl;
qu.pop();
int nxt = (ti + 1) % MOD;
forr(i , 0 , 3 , 1){
int d1 = x + dx[i] , d2 = y + dy[i];
if(min(d1 , d2) >= 1 && max(d1 , d2) <= n && !ok[nxt][d1][d2] && minimize(dp[nxt][d1][d2] , dp[ti][x][y] + 1)){
qu.push({nxt , d1 , d2});
}
}
if(!ok[nxt][x][y] && minimize(dp[nxt][x][y] , dp[ti][x][y] + 1)) qu.push({nxt , x , y});
}
int res = 1e9;
forr(i , 0 , 59 , 1) minimize(res , dp[i][en.fi][en.se]);
cout << res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#define TASK ""
//freopen(TASK".inp" , "r" , stdin);
//freopen(TASK".out" , "w" , stdout);
INP();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgYWxsKHYpIHYuYmVnaW4oKSx2LmVuZCgpCiNkZWZpbmUgTUFTSyhpKSAoMUxMIDw8IChpKSkKI2RlZmluZSBpaSBwYWlyPGludCxpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBlbmRsICdcbicKI2RlZmluZSBmb3JyKGksbCxyLGFkZCkgZm9yKGludCBpID0gbDtpIDw9IHI7IGkgPSBpICsgYWRkKQojZGVmaW5lIGZvZGQoaSxsLHIsc3ViKSBmb3IoaW50IGkgPSBsO2kgPj0gciA7IGkgPSBpIC0gc3ViKQp0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPiBib29sIG1pbmltaXplKFQxICZhLCBUMiBiKSB7aWYgKGEgPiBiKSB7YSA9IGI7IHJldHVybiB0cnVlO30gcmV0dXJuIGZhbHNlO30KdGVtcGxhdGUgPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4gYm9vbCBtYXhpbWl6ZShUMSAmYSwgVDIgYikge2lmIChhIDwgYikge2EgPSBiOyByZXR1cm4gdHJ1ZTt9IHJldHVybiBmYWxzZTt9Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbXQxOTkzNyByZChjaHJvbm86OnN0ZWFkeV9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpLmNvdW50KCkpOwojZGVmaW5lIHJhbmQgcmQKCmxvbmcgbG9uZyBSYW5kKGxvbmcgbG9uZyBsICwgbG9uZyBsb25nIGgpewoJYXNzZXJ0KGwgPD0gaCk7CglyZXR1cm4gbCArIDFsbCAqIHJkKCkgJSAoaCAtIGwgKyAxKSAqIChyZCgpICUgKGggLSBsICsgMSkpICUgKGggLSBsICsgMSk7Cn0KCgovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gZW5kIG9mIHRlbXBsYXRlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKY29uc3QgaW50IE1BWCA9IDUwNTsKaW50IG4gLCBjICwgcDsKc3RydWN0IG5vZGV7CiAgICBpbnQgeCAsIHkgLCByICwgdDsKfTsKCnN0cnVjdCBpbnsKICAgIGludCB0aSAsIHggLCB5Owp9OwoKbm9kZSBzYXZlWzE1MDA1XTsKaWkgc3QgLCBlbjsKY29uc3QgaW50IE1PRCA9IDYwOwpib29sIG9rWzYwXVtNQVhdW01BWF07CmludCBkcFs2MF1bTUFYXVtNQVhdOwppbnQgZHhbXSA9IHstMSAsIDAgLCAxICwgMH0gLCBkeVtdID0gezAgLCAxICwgMCAsIC0xfTsKCnZvaWQgYnVpbGQoaW50IHRpKXsKICAgIGZvcnIoaSAsIDEgLCBwICwgMSl7CiAgICAgICAgaW50IHggPSBzYXZlW2ldLnggLCB5ID0gc2F2ZVtpXS55ICwgdCA9IChzYXZlW2ldLnQgKyB0aSkgJSBzYXZlW2ldLnI7CiAgICAgICAgZm9ycih1ICwgMCAsIHQgLCAxKXsKICAgICAgICAgICAgZm9ycih2ICwgMCAsIHQgLSB1ICwgMSl7CiAgICAgICAgICAgICAgICBpbnQgZDEgLCBkMjsKICAgICAgICAgICAgICAgIGQxID0geCArIHUgLCBkMiA9IHkgKyB2OwogICAgICAgICAgICAgICAgaWYobWluKGQxICwgZDIpID49IDEgJiYgbWF4KGQxICwgZDIpIDw9IG4pIG9rW3RpXVtkMV1bZDJdID0gMTsKICAgICAgICAgICAgICAgIGQxID0geCArIHUgLCBkMiA9IHkgLSB2OwogICAgICAgICAgICAgICAgaWYobWluKGQxICwgZDIpID49IDEgJiYgbWF4KGQxICwgZDIpIDw9IG4pIG9rW3RpXVtkMV1bZDJdID0gMTsKICAgICAgICAgICAgICAgIGQxID0geCAtIHUgLCBkMiA9IHkgKyB2OwogICAgICAgICAgICAgICAgaWYobWluKGQxICwgZDIpID49IDEgJiYgbWF4KGQxICwgZDIpIDw9IG4pIG9rW3RpXVtkMV1bZDJdID0gMTsKICAgICAgICAgICAgICAgIGQxID0geCAtIHUgLCBkMiA9IHkgLSB2OwogICAgICAgICAgICAgICAgaWYobWluKGQxICwgZDIpID49IDEgJiYgbWF4KGQxICwgZDIpIDw9IG4pIG9rW3RpXVtkMV1bZDJdID0gMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKdm9pZCBJTlAoKXsKICAgIGNpbiA+PiBjID4+IG4gPj4gcDsKICAgIGZvcnIoaSAsIDEgLCBwICwgMSkgY2luID4+IHNhdmVbaV0ueCA+PiBzYXZlW2ldLnkgPj4gc2F2ZVtpXS5yID4+IHNhdmVbaV0udDsKICAgIGNpbiA+PiBzdC5maSA+PiBzdC5zZSA+PiBlbi5maSA+PiBlbi5zZTsKICAgIGZvcnIoaSAsIDAgLCA1OSAsIDEpIGJ1aWxkKGkpOwogICAgaWYoYyA9PSAxKXsKICAgICAgICBpbnQgcmVzID0gMDsKICAgICAgICBmb3JyKGkgLCAwICwgTU9EIC0gMSAsIDEpewogICAgICAgICAgICBpbnQgc3VtID0gMDsKICAgICAgICAgICAgZm9ycih4ICwgMSAsIG4gLCAxKSBmb3JyKHkgLCAxICwgbiAsIDEpIHN1bSArPSBva1tpXVt4XVt5XTsKICAgICAgICAgICAgbWF4aW1pemUocmVzICwgc3VtKTsKICAgICAgICAgICAgLypjb3V0IDw8IGkgPDwgJyAnIDw8IHN1bSA8PCBlbmRsOwogICAgICAgICAgICBmb3JyKHggLCAxICwgbiAsIDEpewogICAgICAgICAgICAgICAgZm9ycih5ICwgMSAsIG4gLCAxKSBjb3V0IDw8IG9rW2ldW3hdW3ldOwogICAgICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgICAgICB9Ki8KICAgICAgICB9CiAgICAgICAgY291dCA8PCByZXM7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgbWVtc2V0KGRwICwgMHgzZiAsIHNpemVvZihkcCkpOwogICAgZHBbMF1bc3QuZmldW3N0LnNlXSA9IDA7CiAgICBxdWV1ZSA8aW4+IHF1OwogICAgcXUucHVzaCh7MCAsIHN0LmZpICwgc3Quc2V9KTsKICAgIHdoaWxlKCFxdS5lbXB0eSgpKXsKICAgICAgICBpbnQgeCA9IHF1LmZyb250KCkueCAsIHRpID0gcXUuZnJvbnQoKS50aSAsIHkgPSBxdS5mcm9udCgpLnk7CiAgICAgICAgLy9jb3V0IDw8IHRpIDw8ICcgJyA8PCB4IDw8ICcgJyA8PCB5IDw8IGVuZGwgPDwgZHBbdGldW3hdW3ldIDw8IGVuZGw7CiAgICAgICAgcXUucG9wKCk7CiAgICAgICAgaW50IG54dCA9ICh0aSArIDEpICUgTU9EOwogICAgICAgIGZvcnIoaSAsIDAgLCAzICwgMSl7CiAgICAgICAgICAgIGludCBkMSA9IHggKyBkeFtpXSAsIGQyID0geSArIGR5W2ldOwogICAgICAgICAgICBpZihtaW4oZDEgLCBkMikgPj0gMSAmJiBtYXgoZDEgLCBkMikgPD0gbiAmJiAhb2tbbnh0XVtkMV1bZDJdICYmIG1pbmltaXplKGRwW254dF1bZDFdW2QyXSAsIGRwW3RpXVt4XVt5XSArIDEpKXsKICAgICAgICAgICAgICAgIHF1LnB1c2goe254dCAsIGQxICwgZDJ9KTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZighb2tbbnh0XVt4XVt5XSAmJiBtaW5pbWl6ZShkcFtueHRdW3hdW3ldICwgZHBbdGldW3hdW3ldICsgMSkpIHF1LnB1c2goe254dCAsIHggLCB5fSk7CiAgICB9ICAgCiAgICBpbnQgcmVzID0gMWU5OwogICAgZm9ycihpICwgMCAsIDU5ICwgMSkgbWluaW1pemUocmVzICwgZHBbaV1bZW4uZmldW2VuLnNlXSk7CiAgICBjb3V0IDw8IHJlczsKfQoKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgICNkZWZpbmUgVEFTSyAiIgogICAgLy9mcmVvcGVuKFRBU0siLmlucCIgLCAiciIgLCBzdGRpbik7CiAgICAvL2ZyZW9wZW4oVEFTSyIub3V0IiAsICJ3IiAsIHN0ZG91dCk7CiAgICBJTlAoKTsKICAgIHJldHVybiAwOwp9Cg==