Tudor's answer is the correct solution.
But to provide a bit more insight into why your code is wrong....
What your code is really doing is just to allocate an array, of length 2 * rows, of pointer to pointer to type int.
What you are trying to create is this:
an array of int** -> int* -> int
-> int
-> int
-> ...more
-> int* -> int
-> int
-> int
-> ...more
-> int* -> int
-> int
-> int
-> ...more
-> ...more
What you have actually created is this:
an array of int** -> int* -> nothing (null address)
-> int* -> nothing...
-> ...more
You then attempt to assign an int to one of the null address pointed by one of the zero-initialized int* in your array of int** (You see, calloc has made sure that all your int*'s are zero)
When you are trying to execute
scanf("%d",&pts[k][0]);
pts[k] refers to the (k - 1)th element in your array of int**, but as shown above, though your code has allocated space for this element indeed, it has initialized it as zero. So, this pts[k] points at NULL. So scanf has obtained an address based on a zero offset from the NULL address... It should be now clear to you that this is invalid.